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

杨中科 .Net Core 笔记 DI 依赖注入2

ServiceCollection services = new ServiceCollection();//定义一个承放服务的集合
services.AddScoped<iGetRole, GetRole>();

using (ServiceProvider serviceProvider = services.BuildServiceProvider())
{

    var list = serviceProvider.GetServices(typeof(iGetRole));
    //获取到所有注册iGetRole类的实现对象

    foreach (var item in list)
    {

    }

}
    var list = serviceProvider.GetServices(typeof(iGetRole));//如果获取不到 则返回null
    var t = serviceProvider.GetRequiredService<iGetRole>();//如果获取不到 则抛出异常

DI注入方式

默认:构造函数注入;属性注入;

---------------------------------------------------------------------------------------------------------------------------------

自动注入示例:

public class MailKitService : IMailKitService
{
    private readonly ILogService _logService;
    private readonly IConfigService _configService;


    public MailKitService(ILogService _logService, IConfigService _configService)
    {
        this._logService = _logService;
        this._configService = _configService;

    }

    public void SendMail(string address, string copyAddress, string title, string content)
    {

        _logService.LogInfo($"发送地址:{address}");

        throw new NotImplementedException();
    }
}


ServiceCollection services = new ServiceCollection();

services.AddScoped<IConfigService, ConfigService>();
services.AddScoped<ILogService, LogService>();
services.AddScoped<IMailKitService, MailKitService>();


using (var provider = services.BuildServiceProvider())
{
    var mailService = provider.GetRequiredService<IMailKitService>();
    //实现IMailKitService服务的 MailKitService构造函数会自动被注入ConfigService、LogService值
    

    mailService.SendMail("11","","","");

}

---------------------------------------------------------------------------------------------------------------------------------

自定义扩展方法,与扩展对象同命名空间,使用this,使用地方可以直接点出来。(必须是静态类)


http://www.kler.cn/a/389858.html

相关文章:

  • 「数据要素」行业简报|2024.11.上刊
  • 服务号消息折叠折射出的腾讯傲慢:上云会不会也一样?
  • 将大型语言模型(如GPT-4)微调用于文本续写任务
  • CLion配置QT开发环境
  • 十九:Spring Boot 依赖(4)-- spring-boot-starter-security依赖详解
  • 从0开始深度学习(28)——序列模型
  • 深入解析Hadoop:大数据处理的基石
  • 大数据新视界 -- 大数据大厂之 Impala 性能优化:为企业决策加速的核心力量(下)(14/30)
  • QToolbar工具栏下拉菜单不弹出有小箭头
  • 阿里云CDN稳定吗?
  • 如何在 Java 中使用 Canal 同步 MySQL 数据到 Redis
  • 【Java学习】电脑基础操作和编程环境配置
  • 华为OD机试真题---电脑病毒感染
  • 基因组编辑与CRISPR技术:基因治疗的革命性突破
  • 刷题---轮转数组
  • unity3d————延时函数
  • 鸿蒙生态的崛起:深度认知、机遇、挑战与案例分析
  • 【MATLAB源码-第214期】基于matlab的遗传算法GA最短路径路由优化算法仿真。
  • 大屏使用自适应后,地图点位偏移问题
  • Verilog基础知识-逻辑值
  • LINUX下的Myql:库的操作
  • mysql查询语句(基础)
  • python开发桌面应用步骤
  • 在vscode实现用和Chrome开发者工具中相同的快捷键进行面板切换
  • ctfshow-web入门-反序列化(web271-web278)
  • android studio导入OpenCv并改造成.kts版本