2012-01-13 46 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数组......但他们没有得到上解析()返回。

我错过了什么?

回答

6

您需要注册类型的接口,或者使用.As<IPersistedModel>()或使用.AsImplementedInterfaces()其所有接口:

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

我相信这个工程没有'AssignableTo ()'ATLEAST在3.5 – arviman 2016-10-31 08:08:45

+0

@arviman是的,会的。这只是为了限制哪些类型被注册(没有它,它会在程序集中注册_all_类型,这可能不是你想要的)。 – porges 2016-12-21 22:36:04

相关问题