我正在使用工厂创建接口的不同具体实例。其中一个具体实例取决于通常会注入的服务。服务的生命周期由容器管理。在这种情况下,将容器注入工厂是否可以?
答案 0 :(得分:2)
我会让容器解析抽象工厂,工厂接口或工厂委托,并将其注入消费者。
然后工厂可以将服务作为依赖项,工厂将解决该问题。
根据评论进行更新:
如果您将服务注入工厂,则不一样 该服务的实例是否传递给工厂创建的每个对象?
是的,工厂创建的每个对象都会获得相同的服务实例(这通常是我想要的)。如果那是不您想要的,请将服务工厂注入工厂。某些容器支持自动解析工厂代理,因此您可以注入Func<IFooService>
。
但是,服务的生命周期必然会受到生命周期的影响 工厂
正如@SebastianWeber在评论中提到的那样,这不是对所有容器的限制。另外,考虑一下是否重要。您可以选择两个寿命中最短的一个,并将其用于两者。
答案 1 :(得分:2)
确实如此。但仅,如果该工厂实现位于Composition Root内。如果该工厂位于应用程序本身(换句话说,外部组合根目录),则表明您正在使用容器作为服务定位器,an anti-pattern应该避免使用。< / p>在这种情况下,将容器注入工厂是否可以?