权重:
AddSingleton→AddTransient→AddScoped
AddSingleton的生命周期:
项目启动-项目关闭 相当于静态类 只会有一个
AddScoped的生命周期:
请求开始-请求结束 在这次请求中获取的对象都是同一个
AddTransient的生命周期:
请求获取-(GC回收-主动释放) 每一次获取的对象都不是同一个
控制器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[HttpGet]
public IActionResult SetTest()
{
sing.Age = 18;
sing.Name = "小红" ;
tran.Age = 19;
tran.Name = "小明" ;
scon.Age = 20;
scon.Name = "小蓝" ;
aService.RedisTest();
return Json( "OK" );
}
|
注入
1 2 3 4 5 6 |
public static void AddTestTran( this IServiceCollection service) {
service.AddTransient<ITranTest, TranTest>();
service.AddSingleton<ISingTest, SingTest>();
service.AddScoped<ISconTest, SconTest>();
service.AddScoped<IAService, AService>();
}
|
服务:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class AService: IAService
{
private ISingTest sing; ITranTest tran; ISconTest scon;
public AService(ISingTest sing, ITranTest tran, ISconTest scon)
{
this .sing = sing;
this .tran = tran;
this .scon = scon;
}
public void RedisTest()
{
}
}
|
AddSingleton的对象没有变
AddScoped的对象没有变化
AddTransient的对象发生变化
------------------------------------------------------------
请求get
AddSingleton的对象没有变
AddScoped的对象发生变化
AddTransient的对象发生变化
注意:
由于AddScoped对象是在请求的时候创建的
所以不能在AddSingleton对象中使用
甚至也不能在AddTransient对象中使用
所以权重为
AddSingleton→AddTransient→AddScoped
不然则会抛如下异常
标签:AddSingleton,scon,tran,AddScoped,sing,AddTransient From: https://www.cnblogs.com/123525-m/p/17861512.html