将容器注入工厂是否可以?

时间:2012-02-01 18:18:55

标签: c# dependency-injection factory-pattern

我正在使用工厂创建接口的不同具体实例。其中一个具体实例取决于通常会注入的服务。服务的生命周期由容器管理。在这种情况下,将容器注入工厂是否可以?

2 个答案:

答案 0 :(得分:2)

我会让容器解析抽象工厂,工厂接口或工厂委托,并将其注入消费者。

然后工厂可以将服务作为依赖项,工厂将解决该问题。

根据评论进行更新:

  

如果您将服务注入工厂,则不一样   该服务的实例是否传递给工厂创建的每个对象?

是的,工厂创建的每个对象都会获得相同的服务实例(这通常是我想要的)。如果那是您想要的,请将服务工厂注入工厂。某些容器支持自动解析工厂代理,因此您可以注入Func<IFooService>

  

但是,服务的生命周期必然会受到生命周期的影响   工厂

正如@SebastianWeber在评论中提到的那样,这不是对所有容器的限制。另外,考虑一下是否重要。您可以选择两个寿命中最短的一个,并将其用于两者。

答案 1 :(得分:2)

  

在这种情况下,将容器注入工厂是否可以?

确实如此。但,如果该工厂实现位于Composition Root内。如果该工厂位于应用程序本身(换句话说,外部组合根目录),则表明您正在使用容器作为服务定位器,an anti-pattern应该避免使用。< / p>