我使用Autofac并因某些原因注入接口的所有注册,这一定是懒惰的。但是我在这个列表中有两个条目。有3个插件,但我的ienum包含6.每个插件都注入两次。我可以使用Distinct,但这似乎是一个黑客。
public WorkInProgressService(IEnumerable<Lazy<IWorkInProgressPlugin>> plugins)
{
this.plugins = plugins;
}
我查了一下,绝对没有登记两次。
答案 0 :(得分:3)
在没有看到你的代码的情况下,我猜你已经两次注册了。
如果您将此代码放在可以访问容器的位置并检查数组中的对象,则可以获得有关注册的更多信息:
var reg = container.ComponentRegistry
.RegistrationsFor(new TypedService(typeof (IWorkInProgressPlugin)))
.ToArray();
如果您在参数中获得6个插件,则会获得6个注册条目。
Autofac的集合支持由this class提供。它获得与服务元素匹配的每个注册,解析每个注册,并将它们放入一个数组中。
Autofac的Lazy<>
支持is provided by this class。它需要内部服务的所有注册,并为每个注册创建一个新的注册,将其包装在Lazy
中。