我正在将城堡温莎用于我正在从事的宠物项目。我开始注意到我需要在代码的不同位置调用 IoC 容器来创建新对象。这种对容器的依赖使我的代码更难维护。
我用过两种解决方案来解决这个问题
我尝试创建抽象工厂作为容器的包装器,我可以将其注入需要创建对象的应用程序部分。这可行但有一些缺点,因为城堡很难将自己的容器作为依赖项注入。所以我必须手动完成,这违背了 IoC 容器的全部目的。
我使用主 applicationcontroller 类来包装 IoC 容器并作为中央工厂/存储库工作。这是相当成功的,但是这个类变得太大了,就像一个中心上帝对象,几乎所有其他对象都有对它的引用。
两种解决方案都有效,但都有其缺点。所以我很好奇其他人是否有同样的问题并找到了更好的解决方案。
编辑 问题不在于依赖于对象B的对象A。在这里我通常只使用构造函数注入并且一切正常。有时我有类型 A 的对象需要在其生命周期内创建可变数量的其他类型 B 的对象。我不知道该怎么做。
@Blair Conrad:到目前为止,维护问题并不严重。我有一些类依赖于容器对象调用 container.Resolve<>。而且我不想让我的代码取决于我认为的基础设施。我仍在尝试,所以我注意到在从 ninject 切换到 Castle 时,我必须更改很多代码。
@花:嗯。我喜欢你的拳头解决方案。它结合了我尝试过的两种解决方案的工作原理。我想我仍然在对象方面考虑太多,而在接口/职责方面考虑得不够。我尝试了专门建造的工厂,但我想让他们在幕后使用容器来创建对象,但我还没有发现如何以干净的方式将容器 DI 转换为对象。