ASP.NET Core IOC容器

复制代码
            //IOC容器支持依赖注入
            {
                ServiceCollection serviceDescriptors = new ServiceCollection();
                serviceDescriptors.AddTransient<IMicrophone, Microphone>();
                serviceDescriptors.AddTransient<IPower, Power>();
                serviceDescriptors.AddTransient<IHeadphone, Headphone>();
                ServiceProvider serviceProvider =serviceDescriptors.BuildServiceProvider();
                IHeadphone headphone = serviceProvider.GetService<IHeadphone>();
            }
复制代码
AddTransient:瞬时生命周期,每一次创建都是是一个全新的实例
ServiceCollection serviceDescriptors = new ServiceCollection();
serviceDescriptors.AddTransient<IMicrophone, Microphone>();
ServiceProvider serviceProvider =serviceDescriptors.BuildServiceProvider();
IMicrophone microphone1 = serviceProvider.GetService<IMicrophone>();

AddSingleton:单例生命周期:同一个类型,创建出来的是同一个实例
ServiceCollection serviceDescriptors = new ServiceCollection();
serviceDescriptors.AddSingleton<IMicrophone, Microphone>();
ServiceProvider serviceProvider = serviceDescriptors.BuildServiceProvider();
IMicrophone microphone1 = serviceProvider.GetService<IMicrophone>();

AddScoped:作用域生命周期: 同一个serviceProvider获取到的是同一个实例
ServiceCollection serviceDescriptors = new ServiceCollection();
serviceDescriptors.AddScoped<IMicrophone, Microphone>();
ServiceProvider serviceProvider1 = serviceDescriptors.BuildServiceProvider();
IMicrophone microphone1 = serviceProvider1.GetService<IMicrophone>();

ServiceCollection 抽象和具体之间多种注册方式

复制代码
{
    ServiceCollection serviceDescriptors = new ServiceCollection();
    serviceDescriptors.AddTransient<IMicrophone, Microphone>();
    ServiceProvider serviceProvider1 = serviceDescriptors.BuildServiceProvider();
    IMicrophone microphone1 = serviceProvider1.GetService<IMicrophone>();
}
{
    ServiceCollection serviceDescriptors = new ServiceCollection();
    serviceDescriptors.AddTransient(typeof(IMicrophone), typeof(Microphone));
    ServiceProvider serviceProvider1 = serviceDescriptors.BuildServiceProvider();
    IMicrophone microphone1 = serviceProvider1.GetService<IMicrophone>();
}
//注册抽象和一段业务逻辑
{
    ServiceCollection serviceDescriptors = new ServiceCollection();
    serviceDescriptors.AddTransient(typeof(IPower), provider =>
    {
        //在这里可以我们自己来决定如何创建这个对象的实例;可以对创建出来的这个实例,可以做加工
        IMicrophone microphone = provider.GetService<IMicrophone>();
        return new Power(microphone);
    });

    serviceDescriptors.AddTransient(typeof(IMicrophone), typeof(Microphone));
    ServiceProvider serviceProvider1 = serviceDescriptors.BuildServiceProvider();
    IPower power = serviceProvider1.GetService<IPower>();
}
{
    ServiceCollection serviceDescriptors = new ServiceCollection();
    serviceDescriptors.AddTransient(typeof(Microphone));
    ServiceProvider serviceProvider1 = serviceDescriptors.BuildServiceProvider();
    Microphone microphone1 = serviceProvider1.GetService<Microphone>();
}

{
    ServiceCollection serviceDescriptors = new ServiceCollection();
    serviceDescriptors.AddTransient<Microphone>();
    ServiceProvider serviceProvider1 = serviceDescriptors.BuildServiceProvider();
    Microphone microphone1 = serviceProvider1.GetService<Microphone>();
} 
相关推荐
2601_966949652 小时前
如何根据研究的起止时间截取分钟级行情?Python 实战与 QuantDash 数据处理指南
开发语言·python·pandas·量化交易·1024程序员节·股票数据·quantdash
晨曦中的暮雨4 小时前
限流算法——固定窗口、滑动窗口、漏桶、令牌桶
java·开发语言·算法
喵了几个咪5 小时前
GoWind CMS 拆解:在 Go 里给 TipTap 搭一套 Yjs 协同后端
开发语言·后端·golang
程序员清风5 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
文丑颜不良啊5 小时前
LeetCode876~900题目解析
java·leetcode
aloha_7896 小时前
Java 基础、集合、异常与 JUnit 5 速查
java·junit·sqlserver
知守观7 小时前
设计模式实战:从真实老项目中看标准模板方法与工厂的落地
java·spring·设计模式
2601_962885727 小时前
如何用 Python 把 K 线重采样成任意周期?
开发语言·python
独隅7 小时前
Claude API 实战教程:从入门到完整项目
android·java·数据库·claude·claude code
Wang's Blog7 小时前
Java 项目实战: 交友项目 - 圈子功能实现:总结
java·开发语言·交友