如何避免依赖注入构造函数疯狂?

我发现我的构造函数开始看起来像这样:

public MyClass(Container con, SomeClass1 obj1, SomeClass2, obj2.... )

参数列表不断增加。既然“容器”是我的依赖注入容器,为什么我不能这样做:

public MyClass(Container con)

每个班级?缺点是什么?如果我这样做,感觉就像我在使用一个美化的静态。请分享您对IoC和依赖注入疯狂的看法。


答案 1

你是对的,如果你将容器用作服务定位器,它或多或少是一个美化的静态工厂。出于很多原因,我认为这是一种反模式(另请参阅我书中的摘录)。

构造函数注入的一个奇妙好处是,它使违反单一责任原则的行为变得非常明显。

发生这种情况时,是时候重构到 Facade 服务了。简而言之,创建一个新的、更粗粒度的接口,隐藏您当前需要的部分或全部细粒度依赖项之间的交互。


答案 2

我不认为你的类构造函数应该引用你的 IOC 容器周期。这表示您的类和容器之间不必要的依赖关系(IOC 试图避免的依赖关系类型!


推荐