当懒惰注入IEnumerable获取双重条目

时间:2014-04-16 12:49:59

标签: c# autofac code-injection lazy-evaluation

我使用Autofac并因某些原因注入接口的所有注册,这一定是懒惰的。但是我在这个列表中有两个条目。有3个插件,但我的ienum包含6.每个插件都注入两次。我可以使用Distinct,但这似乎是一个黑客。

public WorkInProgressService(IEnumerable<Lazy<IWorkInProgressPlugin>> plugins)
{
  this.plugins = plugins;
}

我查了一下,绝对没有登记两次。

1 个答案:

答案 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中。