2010-05-19 5 views
1

응용 프로그램의 다양한 레이어에서 컨테이너를 공유하고 싶습니다. 콘테이너를 초기화하고 컨테이너에 타입을 등록하는 정적 클래스를 만들기 시작했습니다.Ninject : 공유 DI/IoC 컨테이너

public class GeneralDIModule : NinjectModule 
{ 
    public override void Load() 
    { 
     Bind<IDataBroker>().To<DataBroker>().InSingletonScope(); 
    } 
} 

public abstract class IoC 
{ 
    private static IKernel _container; 

    public static void Initialize() 
    { 
     _container = new StandardKernel(new GeneralDIModule(), new ViewModelDIModule()); 
    } 

    public static T Get<T>() 
    { 
     return _container.Get<T>(); 
    } 
} 

해결 방법도 있습니다. Resolve와 Get의 차이점은 무엇입니까?

내 단위 테스트에서 컨테이너에 등록 된 모든 유형이 항상 필요한 것은 아닙니다. 빈 컨테이너를 초기화 한 다음 필요한 유형을 등록하는 방법이 있습니까? 단위 테스트에서도 유형을 조롱 할 것이므로 등록해야 할 것입니다.

Inject 메서드가 있지만 인스턴스의 수명주기가 관리되지 않는다고 말합니까?

누군가 나를 올바른 방법으로 설정할 수 있습니까?

어떻게 개체를 등록하고 등록을 취소하고 컨테이너를 다시 설정할 수 있습니까?

+0

안녕하세요 이안 답장을 보내 주셔서 감사합니다. 몇 가지 질문이 있습니다. - Get 메서드가 일시적인 라이프 스타일로 형식의 새 인스턴스를 만듭니다. - 일부 조롱 프레임 워크를 사용하여 유형의 조롱 된 인스턴스를 만든 경우 Rhino Mock을 말하고 커널에 삽입하면 후속 Get에서 해당 유형의 새 인스턴스를 만들거나 동일한 인스턴스를 반환합니까? - ninject.moq가 RhinoMocks와 어떻게 다른가요? 감사합니다. – joblot

+0

라이프 스타일을 지정하지 않았거나 .InTransientScope()를 지정하면 .Get을 호출 할 때마다 새 인스턴스가 반환됩니다. 가능한 경우 Ninject.Moq (Moq을 사용) 이전에 Moq 또는 RhinoMocks를 사용하십시오. Moq와 RhinoMock은 좋은 조롱 프레임 워크입니다. –

+0

그래서 모듈에 바인딩 할 때 SingletonScope을 지정하고 유형의 조롱 된 인스턴스를 삽입하면 Get을 호출 할 때마다 동일한 인스턴스가 반환됩니까? Inject가 라이프 사이클을 관리하지 않고 지정된 기존 인스턴스를 주입한다고 표시되면 어떤 의미입니까? 나는 또한 Silverlight 버전의 Ninject에서 동적으로 Load 모듈 ("* .dll")을로드하는 데 사용할 수있는 문자열 arugment를 사용하는 Load 버전이 없음을 알고 있습니다. Silverlight에서 어떻게 동적으로로드 할 수 있습니까? 감사합니다 – joblot

답변

2

기본적으로 Ninject는 일시적인 라이프 스타일의 구성 요소를 바인딩하며 Ninject는 일시적인 인스턴스를 추적하지 않습니다. Resolve는 내부적으로 사용되므로 자신이하는 일을 실제로 알지 못하는 경우 코드에서 사용해서는 안됩니다. 컨테이너를 조롱하려면 github에서 ninject.moq 확장자를 사용하십시오. 참조하는 inject 메소드는 직접 작성한 인스턴스에 대한 것입니다. Get 및 TryGet 메서드를 사용하십시오.

+0

Ninject 2에서 기본 라이프 스타일은 일시적인 것이 아니라 일시적인 것입니다. –

+0

우리는 1 년 전에 그것을 일시적으로 변경했습니다. 당신은 104 행에 대한 비난에서 그것을 볼 수 있습니다 : http://github.com/ninject/ninject/blame/master/src/Ninject/Planning/Bindings/Binding.cs –

+0

안녕하세요 이안 답장을 보내 주셔서 감사합니다. 몇 가지 질문이 있습니다. - Get 메서드가 일시적인 라이프 스타일로 형식의 새 인스턴스를 만듭니다. - 일부 조롱 프레임 워크를 사용하여 유형의 조롱 된 인스턴스를 만든 경우 Rhino Mock을 말하고 커널에 삽입하면 후속 Get에서 해당 유형의 새 인스턴스를 만들거나 동일한 인스턴스를 반환합니까? - ninject.moq가 RhinoMocks와 어떻게 다른가요? 감사합니다. – joblot