2009-10-16 4 views
2

MVC 프로젝트에서 Ninject를 사용하고 있으며 Ninject.Mvc에서 자동 등록 기능을 사용했으며 내 바인딩을 응용 프로그램 클래스에 설정했습니다. 그러나, 나는 그 바인딩과 별도의 인스턴스를 만들고 싶은 곳이있다. StructureMap에서 var foo = ObjectFactory.GetInstance<IFoo>();을 수행하면 해결됩니다. 거기에 Ninject 2에 상응하는 것이 있습니까? 어디서나 찾을 수없는 것 같습니다.StructureMap의 ObjectFactory.GetInstance() 메소드에 해당하는 Ninject를 찾고 있습니다.

답변

6

AFAIK, NInject에는 이와 같은 정적 메서드가 없으므로 모든 해결은 일부 커널로 가야합니다.

하지만 쉽게 구현할 수 있습니다.

class ObjectFactory 
{ 
    static IKernel kernel = new StandardKernel(.....); 
    public static T GetInstance<T>() 
    { 
      return kernel.Get<T>(); 
    } 
} 

IMO, NInject는 서비스 탐지기보다 DI 컨테이너로서 훨씬 유용합니다.

+0

그래, 정적 컨테이너 접근을 추가하는 것은 매우 간단하다 : 당신의 코드에서

이 같은 것을 사용할 수 있습니다. 접근자가 필요할 때 재사용되는 클래스가 있습니다. http://github.com/idavis/ninject.extensions.wcf/blob/master/source/Ninject.Extensions.Wcf/KernelContainer.cs –

1

원하는 것을 제공하는 Ninject IOC의 추상화 레이어로 Common Service Locator을 사용할 수도 있습니다. 장점은 나중에 컨테이너를 바꿀 수 있다는 것입니다.

ServiceLocator.Current.GetInstance<Type>(); 
관련 문제