当使用IoC进行依赖注入时,最推荐的用途是构造函数注入(如许多文章所述),我的问题是:
是否更好地使用构造函数参数注入或通过构造函数传递IoC容器以注入所需的类,以及哪些对单元测试更有用?
答案 0 :(得分:5)
使用构造函数/属性注入更好。当您将IOC容器传递给构造函数时,您不再执行依赖注入和控制反转。您正在执行服务定位器模式。这意味着类不再获取消费者注入的依赖项,但他们尝试尝试获取它们。您也可能将代码绑定到某个特定的DI框架。
答案 1 :(得分:5)
虽然通过构造函数传递容器比使容器作为完整应用程序的单例可访问更好,但它仍然是Service Locator (anti-pattern)的一种形式,不建议使用。{3}}。这有明显的缺点:
只需将依赖项注入构造函数,而不是*容器本身。
*此规则的例外情况是此类位于appliation的Composition Root内。在这种情况下,它不被认为是简单定位器模式,因为该类只是infrastructure component。