当前位置: 首页 > news >正文

03_02_服务注册与消费

03_02_服务注册与消费

一、ServiceCollection

所有服务都是注册在ServiceCollection集合上的

根容器是通过BuildServiceProvider()创建出来的

ServiceCollection是存放服务注册信息的集合

不是容器,是信息,类型信息,登录了类型的名称,对应的接口,注册信息

根据注册信息进行实例化

服务描述类List<ServiceDescriptor>,服务类型,实现类型

如果构造函数参数需要其它实例,参数实例也必须在容器里已经存在

多个重载的构造函数 

依赖注入系统是根据构造函数来构造实例

有多个,会用哪个来构造呢?

new的时候也只能构造其中一个

如果一个类里面有3个构造函数,会选择哪一个呢?

 public static class Sample01{private interface ITest{ }public class Account: IAccount{}public class Message: IMessage{}public class Tool: ITool{}public class Test: ITest{public Test(IAccount account){Console.WriteLine($"Ctor:Test(IAccount)");}public Test(IAccount account, IMessage message){Console.WriteLine($"Ctor:Test(IAccount,IMessage)");}public Test(IAccount account, IMessage message, ITool tool){Console.WriteLine($"Ctor:Test(IAccount,IMessage,ITool)");}}public static void Run(){var test = new ServiceCollection().AddTransient<IAccount, Account>().AddTransient<IMessage, Message>().AddTransient<ITest, Test>().BuildServiceProvider().GetService<ITest>();}}

在所有符合条件,选择参数最多的那一个,超集

第三个ITool tool没有注册,所以会选择第二个

 

2、如果参数相同,会选择哪一个呢?

如果某个构造函数的参数类型集合,能够成为所有合法构造函数参数类型集合的超集

public static class Sample02
{private interface ITest{ }public class Account: IAccount{}public class Message: IMessage{}public class Tool: ITool{}public class Test: ITest{public Test(IAccount account, IMessage message){Console.WriteLine($"Ctor:Test(IAccount)");}public Test(IMessage message, ITool tool){Console.WriteLine($"Ctor:Test(IAccount,IMessage)");}}public static void Run(){var test = new ServiceCollection().AddTransient<IAccount, Account>().AddTransient<IMessage, Message>().AddTransient<ITool, Tool>().AddTransient<ITest, Test>().BuildServiceProvider().GetService<ITest>();}
}

都不会,不满足某一个构造函数里面的参数集合能够成为超集。

两个条件:

1、都存在在容器

2、参数集合存在超集

抛异常:

Reference knowledge, personality instructions, deep thinking, 100/5000 AI translation, translation, AI big model translation, unable to activate type "ConsoleApp1. Sample02+Test". The following constructors are ambiguous

无法激活类型“ConsoleApp1.Sample02+Test”。以下构造函数存在歧义

Void .ctor(ConsoleApp1.IAccount, Zhaoxi.ConsoleApp1.IMessage)
Void .ctor(ConsoleApp1.IMessage, Zhaoxi.ConsoleApp1.ITool)”

两个构造函数,没有一个是超集的

选择无能

一个常见的坑

 

http://www.jsqmd.com/news/303883/

相关文章:

  • 2026年不锈钢管公司权威推荐:304/304l不锈钢管、316l不锈钢管、三通管件、不锈钢管厚壁管、不锈钢管圆管选择指南
  • Redis深度解析
  • 2026年京东年货节1月25日开启!淘宝年货节1月19日开启!年货节开启时间红包口令满减优惠力度与整体节奏
  • 富文本编辑器CKEDITOR图文混排的WORD图片示例?
  • 9.网络工具nmap和traceroute、tracert
  • RK3568平台YOLOv11模型部署教程:环境配置与端侧推理优化全流程解析
  • RK3568平台YOLOv11模型部署全流程实战:环境搭建、模型转换与性能优化解析
  • 国防项目CKEDITOR粘贴地图截图的示例代码?
  • 动图制作超简单?在线图片合成GIF高效方法
  • GIF编辑零门槛,图片合成GIF工具5分钟上手方案
  • 社保卡照片怎么压缩?社保卡制卡证件照要求全解
  • 汽车制造CKEDITOR如何通过示例实现设计图粘贴?
  • 公务员报名图片大小压缩,照片怎么改才合规
  • Product Hunt 每日热榜 | 2026-01-26
  • 地下管网流量水质监测设备技术应用分析
  • 【牛客网-小红的k次方】:避免大数问题
  • udev 规则
  • 【开源推荐】AgentForce:当 GraphRAG 遇上 Agentic Workflow,打造下一代 AI 智能体平台 - TW
  • 2026年钉钉服务商推荐:基于多行业应用评价,针对数据孤岛与效率痛点精准指南
  • 2026年钉钉服务商推荐:基于多行业应用评价,针对定制开发与数据安全痛点精准指南
  • 2026年青岛全屋定制品牌推荐榜单:基于10大核心指标解析
  • 2026年制氮机厂家最新推荐:vpsa真空变压吸附式工业制氧机、中型工业制氧机、大型工业制氧站、小型工业制氧机选择指南
  • 兜兜英语词根词缀拆解工具:用构词法学英语,让单词记忆有根可循
  • 2026年天虹购物卡回收三种主流方式与难易程度
  • 2026增压器实力厂家新动态:谁在领跑市场?金刚炮升压器/纽荷兰增压器/天龙增压器/欧曼增压器,增压器厂商找哪家
  • 软件工程毕业设计选题指南:基于 Web 管理系统的项目方向解析
  • 2026年锡柴国六涡轮增压器生产厂家优质排行揭秘,农机增压器/福康增压器/威孚增压器,涡轮增压器维修排行
  • 2026年青岛全屋定制品牌推荐:基于环保与耐用性评测,解决居家健康与维护痛点指南
  • 2026专业制氮机公司推荐榜 适配多行业需求
  • 2026年青岛全屋定制品牌推荐:针对大宅与平层场景深度评价,解决交付不确定性与风格割裂痛点