0

我最近一直在玩 Castle Windsor,并意识到我可以用它来支持我目前已经使用的类似容器的对象。到目前为止,我只阅读了有关每个应用程序只有一个容器实例的应用程序的信息。如果这些容器属于不同的层,每个应用程序有多个容器是否正确?

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

4

3 回答 3

2

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

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

  • 将您的相关组件包装在设施中。这将有助于简化内部组件的配置并保持私有。
  • 使用工厂或子依赖解析器( ref1ref2ref3)将组件实例化委托给类似容器的对象
  • 使用子容器。我从未尝试过它们,但看起来它在这种情况下会有所帮助(参见ref1ref2ref3)。

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

于 2009-05-19T00:23:37.607 回答
0

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

于 2009-05-19T09:33:10.060 回答
0

您可能会使用子内核,可能吗?但我不太喜欢这个主意。

于 2009-05-20T12:24:39.817 回答