IoC - 在 IoC 创建的对象中加载容器是否是一种不好的做法

本文关键字:IoC 一种 创建 对象 加载 是否是 | 更新日期: 2023-09-27 18:37:18

我正在与温莎城堡合作作为IoC。我正在查看一些由团队成员编写的代码,我试图弄清楚这里的最佳实践是什么。关于这种写法,我有些奇怪,但我没有经验说应该做什么。

有两个城堡配置(这是我的第一个抱怨,但为了给出怀疑的好处,让我们说这是可以的)。比方说:cfgMaincfgSub.

有一个主类负责设置应用程序并使其运行。(它可以是一个带有 Main() 或 Global.asax 的类,没关系)。比方说:MainClass.

还有一个DependentClass

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

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

似乎在类内部有一个硬编码的路径,该路径本身是通过 IoC 创建的,这是灾难的秘诀。这也使得单元测试变得非常困难。

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

IoC - 在 IoC 创建的对象中加载容器是否是一种不好的做法

如果没有关于为什么有两种配置的信息,就不可能判断这一点。

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

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

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

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