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

Dependency injection 如果依赖项只在单个方法中使用,我应该注入它还是使用服务位置?,dependency-injection,constructor,lazy-loading,Dependency Injection,Constructor,Lazy Loading,我对依赖注入有点陌生&在工作中遇到了这个问题 假设我有一个类'Employee',它有一个方法,这个方法说'Promote'在最罕见的场景中也被有条件地调用 “Promote”方法使用“ValueAddition”对象,现在最好通过构造函数和用户全局对象注入该对象,还是我应该 解决方法本身的依赖关系 推荐的最佳实践是什么?或者任何关于已解析依赖项生存期的指针都会很有帮助。通常,您应该始终注意注入依赖项,而不是使用服务位置(即,直接从控制容器的反转解析依赖项) 在扩展时,您可能会遇到其他问题,这些

我对依赖注入有点陌生&在工作中遇到了这个问题

假设我有一个类'Employee',它有一个方法,这个方法说'Promote'在最罕见的场景中也被有条件地调用

“Promote”方法使用“ValueAddition”对象,现在最好通过构造函数和用户全局对象注入该对象,还是我应该 解决方法本身的依赖关系


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

通常,您应该始终注意注入依赖项,而不是使用服务位置(即,直接从控制容器的反转解析依赖项)

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

    >强>我只需要一个方法中的对象。< /强>考虑将方法的功能移动到一个不同的对象。例如,可能
    Promote()
    方法应该位于
    IEmployeePromoter
    上,您可以在其中解析该方法,并获取特殊对象。然后调用
    Promote(Employee)
    并传入该员工,而不是更改
    员工的依赖项。有时,您的控制反转容器将有一种方法来生成工厂(如
    Func
    Lazy
    ),以帮助您推迟解决方案,直到您真正需要它为止
  • 我有太多的依赖项。通常这意味着你的对象做得太多了。可以帮助您将对象重构为更易于管理的大小。较小的对象通常需要较少的依赖项,因为它们需要管理的问题要少得多

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

这是一个好问题,更一般地说是关于如何使用DI,而不是关于Autofac。我将更新你的问题标题,以获得更具针对性的关注。谢谢特拉维斯,这很有帮助!