首页 > 编程语言 >ASP.NET Core中DI中Add*方法对类的假定

ASP.NET Core中DI中Add*方法对类的假定

时间:2023-10-19 13:44:41浏览次数:36  
标签:容器 ASP Core DI 函数参数 Add 注册 构造函数

在ASP.NET Core的依赖注入(DI)容器中,当你使用Add*方法和泛型类型来指定要注册的类时,容器会做出以下假设:

(1)类必须是具体类(Concrete Class):使用Add*方法注册的类必须是一个具体的类,不能是接口或抽象类。这是因为你正在为特定服务类型注册一个实际的实现类。

(2)类应该只有一个相关的构造函数:容器假设具体类只有一个公共构造函数可用于依赖注入。如果类有多个构造函数,容器会选择参数最多的构造函数进行解析。如果存在多个构造函数具有相同数量的参数,将会导致运行时错误,需要明确指定要使用的构造函数。

(3)所有构造函数参数必须在容器中注册或具有默认值:容器假设具体类的构造函数参数都有对应的服务在容器中注册。换句话说,如果要注册的类的构造函数需要依赖项,那么这些依赖项也必须在容器中注册。如果构造函数参数没有对应的注册或无法解析,将导致运行时错误。

(a)重写了构造函数,导致无参构造消失,但重写的构造函数,不满足条件,于是报错:

(b)有一个构造函数,满足容器的要求,于是调用该构造函数:

(c)有多个满足容器要求的构造函数,于是调用参数最多的构造函数:

标签:容器,ASP,Core,DI,函数参数,Add,注册,构造函数
From: https://www.cnblogs.com/johnyang/p/17774507.html

相关文章

  • 查看显卡使用情况nvidia-smi报错:command not found
    辗转查看了很多教程,踩了好多坑,最后终于解决了,参考的相关博客会在后文做引用。我解决的办法:1、在root下重启机器,执行:reboot2、重启以后,执行:cd/usr/src/,然后ls,查看nvidia-xxx,xxx为支持的版本号;3、安装驱动,执行:sudoapt-getinstalldkmssudodkmsinstall-mnvidia-vxxx(xxx为......
  • Qto_BuildingBaseQuantities
    Qto_BuildingBaseQuantities建筑基准数量:建筑的所有引用的定义中通用的基准数量。   NameTypeDescriptionHeightQ_LENGTHFirsthöhe楼层的系统高度,从未加工天花板的上边缘到上层未加工天花板上边缘测量。仅当存在恒定高度时指定。Height该建筑的标准......
  • [Mac] 安装paddle-pipelines出现 ERROR: Failed building wheel for lmdb
    今天在mac换了新系统,然后重新安装paddle-piplines的时候出现了下面的问题:xcrun:error:invalidactivedeveloperpath(/Library/Developer/CommandLineTools),missingxcrunat:/Library/Developer/CommandLineTools/usr/bin/xcrunerror:command'/usr/bin/clang'fai......
  • redis 持久化
    2.1.基于AOF的持久化机制Redis的AOF持久化是指将数据存储到二进制日志文件中,以便在重启或出现故障时可以恢复数据。AOF持久化会周期性地将数据写入到日志文件中,因此可以实现更高的数据备份频率。 2.2.基于RDB的持久化机制基于RDB的持久化方式会把当前内存中所有Redis键值对......
  • 分享一个Redis自带的压测工具:redis-benchmark
    前言今天给xdm分享一个Redis自带的压测工具:redis-benchmark。介绍redis-benchmark是一个用于测试Redis性能的基准测试工具,可以帮助开发人员评估和比较Redis在不同配置或负载情况下的吞吐量和延迟。使用redis-benchmark可以执行多种类型的基准测试,例如:SET/GET操作测......
  • Redis实现登录(基于session)
    Redis实现登录(基于session)拦截器:实现多模块用户登录的校验代码:创建拦截器publicclassLoginInterceptorimplementsHandlerInterceptor{@OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsExcept......
  • Educational Codeforces Round 150 (Rated for Div. 2) B. Keep it Beautiful
    数组\(a=[a_1,a_2,\cdots,a_n]\)被称为是美丽的,如果可以将\([1,x]\)段移到\([x+1,n]\)段后面,\(x\geq0\),数组可以构成非降序。现在有一个数组\(a\)(一开始为空)和\(q\)个询问,第\(i\)个询问给一个正整数\(x_i\)。需要逐步执行以下操作。若\(x_i\)拼接......
  • Detected non-NVML platform: could not load NVML: libnvidia-ml.so.1: cannot open
    前言在kubernetes中配置https://github.com/NVIDIA/k8s-device-plugin时,报错:Detectednon-NVMLplatform:couldnotloadNVML:libnvidia-ml.so.1:cannotopensharedobject解决kubernetes使用运行时docker,需要编辑通常存在的配置文件/etc/docker/daemon.json,以......
  • vue +asp.net core webapi跨域
              vue代码:  login.vue  <template>  <divclass="login-wrap">      <el-buttontype="primary"style="width:100%;"@click="doSubmit()">提交</el-button>      ......
  • C# AVEVA 加载其他AddIn插件
    通过程序加载了其他插件[MyAmFunctionAtt(nameof(测试功能),nameof(加载其他插件))]publicvoid加载其他插件(WindowManagerwm){varaddInM=Aveva.ApplicationFramework.AddinManager.Instance;varui=newMarUi();try{varaddin=addInM......