Dependency injection 如果依赖项只在单个方法中使用,我应该注入它还是使用服务位置?
我对依赖注入有点陌生&在工作中遇到了这个问题 假设我有一个类'Employee',它有一个方法,这个方法说'Promote'在最罕见的场景中也被有条件地调用 “Promote”方法使用“ValueAddition”对象,现在最好通过构造函数和用户全局对象注入该对象,还是我应该 解决方法本身的依赖关系Dependency injection 如果依赖项只在单个方法中使用,我应该注入它还是使用服务位置?,dependency-injection,constructor,lazy-loading,Dependency Injection,Constructor,Lazy Loading,我对依赖注入有点陌生&在工作中遇到了这个问题 假设我有一个类'Employee',它有一个方法,这个方法说'Promote'在最罕见的场景中也被有条件地调用 “Promote”方法使用“ValueAddition”对象,现在最好通过构造函数和用户全局对象注入该对象,还是我应该 解决方法本身的依赖关系 推荐的最佳实践是什么?或者任何关于已解析依赖项生存期的指针都会很有帮助。通常,您应该始终注意注入依赖项,而不是使用服务位置(即,直接从控制容器的反转解析依赖项) 在扩展时,您可能会遇到其他问题,这些
推荐的最佳实践是什么?或者任何关于已解析依赖项生存期的指针都会很有帮助。通常,您应该始终注意注入依赖项,而不是使用服务位置(即,直接从控制容器的反转解析依赖项) 在扩展时,您可能会遇到其他问题,这些问题似乎指向您使用服务位置。一般来说,您确实应该围绕这些问题进行设计,而不是回到服务位置
- 我有太多的依赖项。通常这意味着你的对象做得太多了。可以帮助您将对象重构为更易于管理的大小。较小的对象通常需要较少的依赖项,因为它们需要管理的问题要少得多
Promote()
方法应该位于IEmployeePromoter
上,您可以在其中解析该方法,并获取特殊对象。然后调用Promote(Employee)
并传入该员工,而不是更改员工的依赖项。有时,您的控制反转容器将有一种方法来生成工厂(如Func
或Lazy
),以帮助您推迟解决方案,直到您真正需要它为止
有大量关于依赖注入模式的文档和书籍。如果不适用于特定的框架(甚至语言),最好将搜索范围扩大到查看一般的模式和实践,这样可以帮助您了解自己代码中的最佳实践。这是一个好问题,更一般地说是关于如何使用DI,而不是关于Autofac。我将更新你的问题标题,以获得更具针对性的关注。谢谢特拉维斯,这很有帮助!