控制容器的多次反转与“一对一”的容器相比

时间:2011-05-02 09:46:53

标签: oop design-patterns

某些项目有一些反转控制组件。

这些是在不同概念领域工作的组件 - 业务,图形用户界面,全球化,存储...... - 。

哪个是您的解决方案?

  • 单个容器中的所有组件。
  • 每个概念区域的容器。

我会感谢利弊。

感谢您提前付出的努力!

1 个答案:

答案 0 :(得分:1)

为了保持一致性,我建议您对所有概念区域使用容器的相同实现(AutoFac,Unity,Spring whaterver)。

如果每个概念区域保留一个容器并不困难,那么就这样做。对于相同的依赖项(例如IEmailService),您将需要针对差异概念区域(RemoteEmailService,LocalEmailService)的不同实现来避免问题。一个缺点是,如果您有共享组件,则需要跟踪它们并在每个容器中为每个区域注册它们。

如果您的IOC实现支持父子容器(AutoFac),则可以在父容器中使用共享组件,并在每个子容器中具有特定于组件的组件。

如果您的IOC实现难以为每个区域使用单独的容器,请不要对抗它,更改它或使用一个全局容器,但在注册组件时要小心。

无论如何,请确保您的代码与IOC实现无关。这样你就可以从一个“一个容器开始”开始,如果需要,可以转到“每个区域的容器”。

相关问题