当前位置: 首页 > 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

相关文章:

  • Oracle数据库传统审计怎么用
  • Vue前端框架概述
  • 微软开源GraphRAG的使用教程(最全,非常详细)
  • Nginx三种不同类型的虚拟主机(基于域名、IP 和端口)
  • 【C++基础】enum,union,uint8_t,static
  • Titans 架构中的记忆整合:Memory as a Context;Gated Memory;Memory as a Layer
  • 深入解析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版本