응용 프로그램의 다양한 레이어에서 컨테이너를 공유하고 싶습니다. 콘테이너를 초기화하고 컨테이너에 타입을 등록하는 정적 클래스를 만들기 시작했습니다.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 메서드가 있지만 인스턴스의 수명주기가 관리되지 않는다고 말합니까?
누군가 나를 올바른 방법으로 설정할 수 있습니까?
어떻게 개체를 등록하고 등록을 취소하고 컨테이너를 다시 설정할 수 있습니까?
안녕하세요 이안 답장을 보내 주셔서 감사합니다. 몇 가지 질문이 있습니다. - Get 메서드가 일시적인 라이프 스타일로 형식의 새 인스턴스를 만듭니다. - 일부 조롱 프레임 워크를 사용하여 유형의 조롱 된 인스턴스를 만든 경우 Rhino Mock을 말하고 커널에 삽입하면 후속 Get에서 해당 유형의 새 인스턴스를 만들거나 동일한 인스턴스를 반환합니까? - ninject.moq가 RhinoMocks와 어떻게 다른가요? 감사합니다. – joblot
라이프 스타일을 지정하지 않았거나 .InTransientScope()를 지정하면 .Get을 호출 할 때마다 새 인스턴스가 반환됩니다. 가능한 경우 Ninject.Moq (Moq을 사용) 이전에 Moq 또는 RhinoMocks를 사용하십시오. Moq와 RhinoMock은 좋은 조롱 프레임 워크입니다. –
그래서 모듈에 바인딩 할 때 SingletonScope을 지정하고 유형의 조롱 된 인스턴스를 삽입하면 Get을 호출 할 때마다 동일한 인스턴스가 반환됩니까? Inject가 라이프 사이클을 관리하지 않고 지정된 기존 인스턴스를 주입한다고 표시되면 어떤 의미입니까? 나는 또한 Silverlight 버전의 Ninject에서 동적으로 Load 모듈 ("* .dll")을로드하는 데 사용할 수있는 문자열 arugment를 사용하는 Load 버전이 없음을 알고 있습니다. Silverlight에서 어떻게 동적으로로드 할 수 있습니까? 감사합니다 – joblot