IoC - 在IoC创建的对象中加载容器是不好的做法吗?

时间:2013-10-29 21:28:48

标签: c# .net inversion-of-control castle-windsor ioc-container

我正在使用Castle Windsor作为IoC。我正在查看团队成员编写的一些代码,我试图弄清楚这里的最佳实践是什么。对于我写这篇文章的方式,有些事情对我来说很奇怪,但我没有经验说明应该做些什么。

有两个城堡配置(这是我的第一个抱怨,但为了产生疑问,让我们说这没关系)。我们说:cfgMaincfgSub

有一个主类负责设置应用程序并使其运行。 (它可以是具有Main()或Global.asax的类,无关紧要)。让我们说:MainClass

还有DependentClass

MainClass实例化CastleContainer并将cfgMain安装到其中,然后解析DependentClass

DependentClass创建另一个 CastleContainer并在其中安装cfgSub这就是我遇到的问题

似乎有一个硬编码路径到一个类中的配置,这个类本身是通过IoC创建的,这是一个灾难的处方。这也使得单元测试变得非常困难。

号召性用语:这里的最佳做法是什么?是否应该合并所有配置?如果有理由(读:需要)将它们分开怎么办?

1 个答案:

答案 0 :(得分:1)

如果没有关于为什么的信息,有两种配置,则无法判断。

但假设 是一个原因,两个类听起来都是复合根的一部分,这是一个靠近应用程序开头的地方,它连接所有容器依赖项。主类是第一个配置的组合根,第二个配置的依赖类。仍然没有错。

我想说用第一个容器解析依赖类是没有意义的 - 复合根是一个具体类,没有理由替换它。但是,可能还有另一个原因使用容器来实例化它 - 依赖项。如果依赖类本身依赖于其他服务,那么使用主配置解析它听起来就像是解决这些依赖关系的唯一方法。

最终,没有其他信息,我会说(所有这些假设)你所描述的内容可能有意义。

但是,我强烈建议您检查是否需要两个单独的配置和两个单独的复合根。听起来过于复杂。