2010-04-15 5 views
1

우리는 최근에 Dependency Injection을 사용하기 시작했으며, 우리는 IoC 컨테이너로서 Ninject 2 (현재는)를 선택했습니다. DI 원칙을 통합하기위한 우리의 솔루션을 리팩토링 할 때, 저는 버그에 조금 빠져 들었습니다. 주위를 둘러보기위한 쉬운 방법이 있는지 궁금합니다.Ninject는 모든 바인딩에 컨텍스트 기반 논리를 적용하도록 지시받을 수 있습니까?

데이터 레이어의 경우 동일한 일반 클래스 (EntityMapper)를 상속하는 모든 데이터 액세스 클래스가 있습니다. 과거에는 우리가 필요할 때 항상 이러한 클래스의 새로운 인스턴스를 만들었지 만, 실제로 모든 클래스를 싱글 톤으로 변경할 수 있습니다. 우리는 Ninject를 사용하여 데이터 액세스 객체를 인스턴스화하기 위해 ObjectDataSource를 재정의했습니다. 따라서 EntityMapper 클래스 중 하나를 가리키는 ObjectDataSource를 만들 때마다 Ninject는 기본 자체 바인딩 전략을 사용하여 필요한 종속성을 주입합니다. 이러한 클래스가 너무 많아서 각 EntityMapper 클래스에 대해 명시 적 바인딩을 만들 필요가 없으며 각 클래스에 특별한 속성을 추가하지 않아도됩니다. 그러나 Ninject가 EntityMapper의 인스턴스를 싱글 톤 클래스로 만들도록 지시하고 싶습니다. 다음과 같이 입력하십시오 :

Bind(t => typeof(IEntityMapper).IsAssignableFrom(t)).InSingletonScope(); 

어떤 방법이 있습니까?

답변

1

당신은 수행 할 conventions extension를 사용할 수있는 다음

var kernel = new StandardKernel(); 
kernel.Scan(x=> 
      { 
       x.FromAssemblyContaining<MyEntityMapper>(); 
       x.FromCallingAssembly(); 
       x.WhereTypeInheritsFrom<IEntityMapper>(); 
       x.InSingletonScope(); 
      }); 
관련 문제