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

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

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

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

For Example:

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



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



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

ASP.NET Core中DI中Add*方法对类的假定的更多相关文章

  1. 探索 ASP.Net Core 3.0系列三:ASP.Net Core 3.0中的Service provider validation

    前言:在本文中,我将描述ASP.NET Core 3.0中新的“validate on build”功能. 这可以用来检测您的DI service provider是否配置错误. 具体而言,该功能可检 ...

  2. ASP.NET Core 2.1 中的 HttpClientFactory (Part 4) 整合Polly实现瞬时故障处理

    原文:https://www.stevejgordon.co.uk/httpclientfactory-using-polly-for-transient-fault-handling发表于:2018 ...

  3. 将终结点图添加到你的ASP.NET Core应用程序中

    在本文中,我将展示如何使用DfaGraphWriter服务在ASP.NET Core 3.0应用程序中可视化你的终结点路由.上面文章我向您演示了如何生成一个有向图(如我上篇文章中所示),可以使用Gra ...

  4. 在ASP.NET Core 2.0中使用CookieAuthentication

    在ASP.NET Core中关于Security有两个容易混淆的概念一个是Authentication(认证),一个是Authorization(授权).而前者是确定用户是谁的过程,后者是围绕着他们允 ...

  5. [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了

    [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 本文首发自:博客园 文章地址: https://www.cnblogs.com/yilezhu/p/ ...

  6. 如何在ASP.NET Core 2.0中使用Razor页面

    如何在ASP.NET Core 2.0中使用Razor页面  DotNetCore2017-11-22 14:49 问题 如何在ASP.NET Core 2.0中使用Razor页面 解 创建一个空的项 ...

  7. C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志

    C#实现多级子目录Zip压缩解压实例 参考 https://blog.csdn.net/lki_suidongdong/article/details/20942977 重点: 实现多级子目录的压缩, ...

  8. ASP.NET Core Web API中使用Swagger

    本节导航 Swagger介绍 在ASP.NET CORE 中的使用swagger   在软件开发中,管理和测试API是一件重要而富有挑战性的工作.在我之前的文章<研发团队,请管好你的API文档& ...

  9. 如何在ASP.NET Core Web API中使用Mini Profiler

    原文如何在ASP.NET Core Web API中使用Mini Profiler 由Anuraj发表于2019年11月25日星期一阅读时间:1分钟 ASPNETCoreMiniProfiler 这篇 ...

  10. ASP.NET Core 2.1 中的 HttpClientFactory (Part 3) 使用Handler实现传出请求中间件

    原文:https://www.stevejgordon.co.uk/httpclientfactory-aspnetcore-outgoing-request-middleware-pipeline- ...

随机推荐

  1. JavaUtils - [04] 代码生成器(新)

    题记部分 001 || 引入依赖 <!-- Code Generator --> <dependency> <groupId>com.baomidou</gr ...

  2. centos 8 编译*.cpp文件

    1.安装g++ yum -y install gcc-c++ 2.编译*.cpp文件 g++ -o test_app_name test_source_file.cpp 3.运行编译结果 ./test ...

  3. C# Socket通信简单示例

    https://files.cnblogs.com/files/mojiejushi/SocketDemo.rar

  4. angular使用nz-zorro的时间选择器,设置可选时间范围

    备份一下 https://blog.csdn.net/qq_34790644/article/details/87098960 https://blog.csdn.net/fsxxzq521/arti ...

  5. AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗

    最近在研究AI Agent如何调用三方API,整理了一篇文章,分享给大家. 调用三方 API(Function Calling)不是通过提示词(Prompt)来实现的,而是通过函数调用机制(Funct ...

  6. IvorySQL 增量备份与合并增量备份功能解析

    1. 概述 IvorySQL v4 引入了块级增量备份和增量备份合并功能,旨在优化数据库备份与恢复流程.通过 pg_basebackup 工具支持增量备份,显著降低了存储需求和备份时间.同时,pg_c ...

  7. 数据质量框架QUalitis浅尝使用

    数据质量管理平台(微众银行)Qualitis+Linkis (一)Qualitis是一个数据质量管理系统,用于监控数据质量. 其功能包括: 数据质量模型定义 数据质量结果可视化 可监控 数据质量管理服 ...

  8. Delphi Inputbox 输入时显示‘*’号

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  9. Oracle UTL_HTTP

    Oracle 中可以通过包 UTL_HTTP 来获取访问 HTTP 的能力. declare req UTL_HTTP.REQ; resp UTL_HTTP.RESP; val varchar2(32 ...

  10. udl(Universal Data Link)通用数据连接文件

    新建文本文档 更改后缀名为.udl(注意小点) 然后打开运行 配置并测试 改回后缀名.txt(有个小点哦) 打开就是了