杨中科 .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,使用地方可以直接点出来。(必须是静态类)

相关推荐
泽虞10 分钟前
《Qt应用开发》笔记p4
linux·开发语言·数据库·c++·笔记·qt·算法
泽虞17 分钟前
《Qt应用开发》笔记p5
linux·开发语言·c++·笔记·qt·算法
hour_go41 分钟前
页表 vs. 组相联缓存:内存管理与性能优化的殊途同归
笔记·操作系统·分页·计算机体系结构·tlb·组相联缓存
superlls6 小时前
(微服务)Dubbo 服务调用
笔记·rpc·dubbo
于小汐在咯7 小时前
词根学习笔记 | Agri系列
笔记·学习
摇滚侠8 小时前
Spring Boot 3零基础教程,Spring Intializer,笔记05
spring boot·笔记·spring
聪明的笨猪猪9 小时前
Java Redis “高可用 — 主从复制”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
摇滚侠9 小时前
Spring Boot 3零基础教程,Demo小结,笔记04
java·spring boot·笔记
做运维的阿瑞10 小时前
Docker 从入门到精通:完整通关笔记
笔记·docker·容器
jiajixi11 小时前
go-swagger学习笔记
笔记·学习·golang