2012-01-13 1 views
4

아래 그림과 같이 내가 같은 간단한 작업을 수행하여 등록 된 모든 유형의 목록을 얻을 수 있습니다 나타냅니다 Autofac 워드 프로세서/위키 많이 읽고 :Autofac의 해결은 <IEnumerable을 <T>>()는 빈리스트를 반환

var builder = new ContainerBuilder(); 
builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()) 
       .AssignableTo<IPersistedModel>(); 
var container = builder.Build(); 
var allTypes = container.Resolve<IEnumerable<IPersistedModel>>(); 

문제는 allTypes가 비어 있습니다.

디버거에서 컨테이너 내부를 볼 수 있으며 7 개의 일치하는 유형과 심지어 IPersistedModel 배열이 있지만 Resolve()에서 반환되지 않습니다.

무엇이 누락 되었습니까?

답변

6

당신은 인터페이스와 유형을 등록해야 하나 .As<IPersistedModel>()을 사용하거나 모든 인터페이스에 대한 .AsImplementedInterfaces()를 사용하여 :

builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()) 
      .AssignableTo<IPersistedModel>() 
      .AsImplementedInterfaces(); 
+0

내가이이어야 3.5 – arviman

+0

@arviman에 AssignableTo ()''없이 작동 생각 예, 그렇습니다. 등록 된 타입을 제한하는 것만으로 (어떤 타입이든 어셈블리에 _all_ 타입을 등록 할 것입니다. 아마도 원하지 않는 타입 일 것입니다). – porges