C#内置IOC容器的生命周期

1.瞬时生命周期,AddTransient------每次获取的对象的实例都是全新的实例

ServiceCollection serviceCollection = new ServiceCollection();

// 注册抽象与具体实现
serviceCollection.AddTransient<IPower, Power>();
serviceCollection.AddTransient<IPhone, ApplePhone>();
serviceCollection.AddTransient<IMicrophone, Microphone>();
serviceCollection.AddTransient<IHeadphone, Headphone>();
//Build下得到一个Provider
ServiceProvider provider = serviceCollection.BuildServiceProvider();
IPhone? phone = provider.GetService<IPhone>();
phone?.Call();

2.作用域生命周期,使用AddScoped方法注册------同一个IServiceProvider获取的对象实例是同一个实例------内存指向是一样的

ServiceCollection serviceCollection = new ServiceCollection();

// 注册抽象与具体实现
serviceCollection.AddScoped<IPhone, ApplePhone>();


IServiceProvider provider1 = serviceCollection.BuildServiceProvider();

IPhone? phone1 = provider1.GetService<IPhone>();
IPhone? phone2 = provider1.GetService<IPhone>();


IServiceProvider provider2 = serviceCollection.BuildServiceProvider();

IPhone? phone3 = provider2.GetService<IPhone>();
IPhone? phone4 = provider2.GetService<IPhone>();

Console.WriteLine(object.ReferenceEquals(phone1,phone2));  // True
Console.WriteLine(object.ReferenceEquals(phone3,phone4));  // True

Console.WriteLine(object.ReferenceEquals(phone1,phone3));  // False
Console.WriteLine(object.ReferenceEquals(phone2,phone4));  // False

3.单例生命周期

ServiceCollection serviceCollection = new ServiceCollection();

serviceCollection.AddSingleton<IMicrophone, Microphone>();

IServiceProvider provider3 = serviceCollection.BuildServiceProvider();
IMicrophone? microphone1 = provider3.GetService<IMicrophone>();
IServiceProvider provider4 = serviceCollection.BuildServiceProvider();
IMicrophone? microphone2 = provider4.GetService<IMicrophone>();


Console.WriteLine(object.ReferenceEquals(microphone1,microphone2));  // False

 单例生命周期必须要在同一个IServiceProvider 中指向同一个地址

使用ServiceCollection需要安装两个依赖

Microsoft.Extensions.DependencyInjection.Abstractions
Microsoft.Extensions.DependencyInjection

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值