我对依赖注入有点陌生,在工作时遇到了问题。
让我们说我有一个'Employee'类,它具有一个方法,该方法说'Promote'在最罕见的情况下也有条件地被调用。
'Promote'方法使用一个'ValueAddition'对象,现在是通过构造函数和用户全局对象注入该对象的最佳实践,还是我应该 解决方法本身的依赖性?
推荐的最佳做法是什么?或任何解决已解决依赖项生命周期的指标都会有所帮助。
答案 0 :(得分:3)
通常,您应该始终注视注入依赖性而不是使用服务位置(即,直接从控制容器的反转中解决依赖性)。 There's a great, pretty well known blog article here called "Service Locator is an Anti-Pattern" that can help clarify the reasons.
在扩展时,您可能会遇到其他问题,这些问题似乎指向您使用服务位置。通常,您确实应该围绕这些问题进行设计,而不要退回到服务位置。
Promote()
方法应该在IEmployeePromoter
上,您可以在其中解决该问题并采用特殊对象。然后,您将呼叫Promote(Employee)
并传递员工,而不是更改Employee
的依赖关系。有时,控制容器的反转将具有一种生成工厂的方式(例如Func<T>
或Lazy<T>
),以帮助您推迟解析,直到您真正需要它为止。关于依赖注入的模式,这里有大量的文档和书籍。不将其应用到特定框架(甚至语言)时,扩大搜索范围以查看一般的模式和实践可能会很好,并且可以帮助您通过自己的代码了解最佳实践。