如果这些容器属于不同的层,每个应用程序有多个Castle Windsor容器是否正确?

时间:2009-05-18 21:25:39

标签: dependency-injection castle-windsor ioc-container

我最近一直在玩温莎城堡,并意识到我可以用它来支持我目前使用的容器式物体。到目前为止,我只阅读了有关每个应用程序只有一个容器实例的应用程序的信息。如果这些容器属于不同的层,每个应用程序有多个容器是否正确?

我问的原因是因为我想利用Windsor的依赖性解析和XML配置来获取我自己的容器类对象。我目前使用Windsor与MonoRail集成,混合使用与MonoRail及其控制器层无关的组件似乎不正确。我的第二个容器将拥有自己的配置文件,并且不了解MonoRail及其使用的容器。它完全位于不同的层中,最终将被注册为MonoRail控制器的依赖项。我觉得应该避免在容器实例周围传递,所以这是避免这种情况的正确方法吗?

3 个答案:

答案 0 :(得分:2)

就个人而言,我只使用一个容器没有任何问题。毕竟,您的MonoRail控制器只会知道他们需要的服务/接口,因此他们不需要了解其他层的内部组件。

如果你仍然不想让你的内部组件对应用程序的其余部分如此可见,这里有几个想法:

  • 将您的相关组件包裹在facilities中。这将有助于简化内部组件的配置并将其保密。
  • 使用工厂或子依赖关系解析器(ref1ref2ref3
  • 将组件实例化委托给类容器对象
  • 使用儿童容器。我从来没有尝试过它们,但在这种情况下看起来可能会有所帮助(请参阅ref1ref2ref3)。

无论您做什么, 都希望让每个组件直接访问容器。如果有的话,请将其保存在“胶水代码”中。

答案 1 :(得分:0)

我认为拥有许多独立的容器并不是一个好主意。但是,您可能希望拥有一个应用程序范围的容器和范围更窄的容器。

答案 2 :(得分:0)

你可能会使用子内核吗?但我不太喜欢这个想法。