我正在使用Castle Windsor完成我的项目。我开始注意到需要在代码中的不同位置调用IoC容器来创建新对象。这种对容器的依赖会使我的代码难以维护。
有两个解决方案可以解决这个问题
我尝试创建抽象工厂作为容器的包装,并将其注入到需要创建对象的应用程序部分中。这个方法可行,但存在一些缺点,因为Castle很难将自己的容器作为依赖项注入。所以我必须手动做,这几乎是违背IoC容器的初衷。
我已经使用主应用控制器类来封装IoC容器并作为中央工厂/存储库。这很成功,但这个类变得太大了,就像一个中央神对象,几乎每个其他对象都引用它。
这两种解决方案都有一定的效果,但都有缺点。因此,我很好奇其他人是否遇到过相同的问题并找到了更好的解决方案。
编辑 问题不是针对依赖于对象B的对象A。在这里,我通常只使用构造函数注入,并且一切正常。有时候,类型为A的对象需要在其生命周期内创建变量数量的其他类型为B的对象。我不确定如何做到这一点。
@Blair Conrad:到目前为止,维护问题并不严重。我有一些类依赖于调用container.Resolve<>的容器对象。我不希望我的代码依赖于我认为是基础设施的东西。我仍在尝试各种方法,所以当我从ninject切换到castle时,我注意到必须更改很多代码。
@flowers: 嗯。我喜欢你的第一个解决方案。它结合了我尝试过的两种解决方案中有效的部分。我认为我还是太注重对象而不是接口/职责。我尝试过定制工厂,但我想让它们在幕后使用容器来创建对象,而我还没有找到如何以清晰的方式将容器注入对象。