如果依赖项仅在单个方法中使用,我应该注入它还是使用服务位置?



我对依赖注入有点陌生,在工作时遇到了主题问题。

假设我有一个类"员工",它有一个方法,这种方法说"提升"在最罕见的情况下也会有条件地调用它。

"Promote"方法使用"ValueAddition"的对象,现在最佳实践是通过构造函数和用户全局对象注入此对象,还是应该 解决方法本身的依赖关系?

什么是推荐的最佳实践?或者任何关于已解决依赖项生存期的指针都会有所帮助。

通常,您应该始终寻求注入依赖项,而不是使用服务位置(即,直接从控制容器的反转解析依赖项(。这里有一篇很棒的、非常著名的博客文章,叫做"服务定位器是一种反模式",可以帮助澄清原因。

在展开时,您可能会遇到其他问题,这些问题似乎指向您使用服务位置。通常,您确实应该围绕这些问题进行设计,而不是回退到服务位置。

  • 我只需要一种方法中的对象。请考虑将方法的功能移动到其他对象。例如,也许Promote()方法应该位于您解决此问题并采用特殊对象的IEmployeePromoter上。然后,您将调用Promote(Employee)并传入员工,而不是更改Employee的依赖项。有时,控制容器的反转会有一种生成工厂(如Func<T>Lazy<T>(的方法,以帮助您推迟解决,直到您实际需要它。
  • 我有太多的依赖关系。通常这意味着您的对象做得太多了。单一责任原则可以帮助您重构对象,使其大小更易于管理。较小的对象通常需要较少的依赖项,因为它们需要管理的问题要少得多。

有大量关于依赖注入模式的文档和书籍。最好将搜索范围扩大到查看未应用于特定框架(甚至语言(的一般模式和实践,它可以帮助您了解自己代码中的最佳实践。

最新更新