首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NetCore依赖注入:构造函数注入与IServiceProvider.GetServices()

.NetCore依赖注入:构造函数注入与IServiceProvider.GetServices()
EN

Stack Overflow用户
提问于 2021-02-09 12:50:05
回答 2查看 939关注 0票数 0

我正在从事一个.NetCore Web项目。

该项目使用Depencency注入。每个控制器利用构造函数注入来获取依赖项。

随着特性的增加,代码级依赖关系在代码质量方面变得越来越复杂并变得复杂(例如,SonarQube,其中最大参数限制在7)。

为什么首选构造函数注入?

只注射IServiceProvider和使用GetServices<T>()怎么样?

EN

回答 2

Stack Overflow用户

发布于 2021-02-09 13:13:28

完整书籍就是针对这个主题编写的,但简而言之:

  • 让应用程序代码直接解析容器中的依赖项是服务位置的一种形式,许多人认为这是一种反模式,因为它的缺点。这篇文章更详细地介绍了它的缺点。
  • 从包含多个参数的构造函数中恢复到Service是个坏主意,因为这不能解决根本问题,即该类有太多的依赖项。它太大了,很可能违反了单一责任原则。有许多构造函数参数是一种代码味道,它的名称是:构造函数过注入
票数 1
EN

Stack Overflow用户

发布于 2021-02-09 13:31:14

在这种情况下,您应该使用一个接口,它比直接调用服务更好。为什么?因为接口是类的标志,并为您提供了所有类的结构并执行RAM。

示例:

1-您应该创建一个接口:

代码语言:javascript
复制
public interface Iexample{
   string AddPerson
}

2-您应该在服务中有一个数据库实例。

代码语言:javascript
复制
public class Example:Iexample
{
   private readonly Iexample _DBContext
    
   public Example(Iexample dbContext ){
     _DBContext=dbContext;
   }

}

3-您必须创建与界面相同的方法,并且所有的方法都准备好了。

代码语言:javascript
复制
public class Example:Iexample{
   private readonly Iexample _DBContext
    
   public Example(Iexample dbContext ){
     _DBContext=dbContext;
   }

   public string GetAll(string code)
      return code;
   }
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66119351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档