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>();
} 
相关推荐
\光辉岁月/26 分钟前
5.java-数组
java·开发语言
Java后端的Ai之路27 分钟前
Python进阶探索29_eval内置函数
开发语言·python·探索·eval·内置函数
谢亮_vipxieliang42 分钟前
Spring 事务失效的常见场景
java·开发语言·数据库·spring boot
时间的拾荒人1 小时前
Qt 多线程详解:从 QThread 到实战
开发语言·qt·面试
郑州光合科技余经理1 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
2601_962071571 小时前
类变量和全局变量的生命周期有什么区别?
java·开发语言·jvm
code2cat1 小时前
Java进阶篇之AtomicReference:一次替换引用,读到一份完整状态
java·并发编程·不可变对象·atomicreference
专业程序开发源1 小时前
springboot简历管理系统81389-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·php·课程设计
Wang's Blog1 小时前
Java 项目实战: 外卖平台优化-前后端分离开发模式与工程拆分
java·开发语言
Dovis(誓平步青云)2 小时前
浇水提醒刚弹出又消失,植物状态别只存一个百分比
开发语言·前端·javascript·pdf·ecmascript·电脑