在IoC顶部的抽象工厂模式?

48 containers factory inversion-of-control

我决定在一个更大的项目中使用IoC原则.但是,我想得到的东西很长一段时间一直困扰着我.我得出的结论是IoC容器是一种架构模式,而不是一种设计模式.换句话说,没有类应该知道它的存在,并且应该在应用层使用容器本身来缝合所有组件.从本质上讲,它是一个精心设计的面向对象模型的选择.话虽如此,如何在不占用IoC容器的情况下访问已解析的类型(无论它们是否抽象)?我在这里看到的唯一选择是利用使用IoC容器来解析具体类型的抽象工厂.这应该很容易换掉一组标准工厂.这是一个好方法吗?有没有人在这里使用它以及它对你有用吗?还有别的吗?

谢谢!

Mar*_*ann 69

正如您已经想到的那样,依赖注入(DI)本身只是模式和技术的集合.

在应用程序的根目录,我们连接所有必要的对象图.这个地方叫做组合根,我们可以使用DI容器为我们做这个接线,或者我们可以手动做(Pure DI).

关键是在您的应用程序中只有一个地方强烈引用特定的技术(您的DI容器).应用程序的其余部分幸福地不知道对象图是如何连接的 - 所有重要的是所有必需的依赖项都被正确注入(并且你可以使用带有Null Guards的Constructor Injection来保证这样).

在DI方面,抽象工厂模式是一个非常有用的模式.实质上,在以下情况下使用Abstract Factory:

  • 在解析依赖关系之前,您需要提供仅在运行时已知的一个或多个参数.
  • 依赖的生命周期在概念上短于消费者的生命周期.

示例和更多信息可在此处获得:

  • 这取决于:您的应用中是否有许多IFruit实例,或者只有一个?如果只有一个,它应该已经通过按钮单击处理程序注入到类中.如果有很多,您很可能需要一个可以从其他运行时值创建IFruit实例的IFruitFactory.在后一种情况下,IFruitFactory将是注入的依赖项. (7认同)