[Asp.Net Core]内置容器生命周期
Posted 厦门德仔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Asp.Net Core]内置容器生命周期相关的知识,希望对你有一定的参考价值。
内置容器生命周期
1.瞬时生命周期:每一次getService获取的实例都是不同的实例
IServiceCollection serviceCollection = new ServiceCollection();
serviceCollection.AddTransient<ITestServiceA, TestServiceA>();//瞬时生命周期,每一次GetService获取的实例都是不相同的实例
ServiceProvider serviceProvider = serviceCollection.BuildServiceProvider();
ITestServiceA testServiceA = serviceProvider.GetService<ITestServiceA>();
ITestServiceA testServiceA1 = serviceProvider.GetService<ITestServiceA>();
bool isOK = object.ReferenceEquals(testServiceA, testServiceA1);
2.单例生命周期,在整个进程中获取的都是同一个实例
IServiceCollection serviceCollection = new ServiceCollection();
serviceCollection.AddSingleton<ITestServiceA, TestServiceA>();//单例生命周期,整个进程获取的都是同一个的实例
ServiceProvider serviceProvider = serviceCollection.BuildServiceProvider();
ITestServiceA testServiceA = serviceProvider.GetService<ITestServiceA>();
ITestServiceA testServiceA1 = serviceProvider.GetService<ITestServiceA>();
bool isOK = object.ReferenceEquals(testServiceA, testServiceA1);
3.作用域生命周期;同一个作用域,获取的是同一个对象的实例;不同的作用域,获取的是不同的对象实例
//同一个作用域,获取的是同一个对象实例,不同的作用域获取的是不同的对象实例。
IServiceCollection serviceCollection = new ServiceCollection();
serviceCollection.AddScoped<ITestServiceA, TestServiceA>();
ServiceProvider serviceProvider = serviceCollection.BuildServiceProvider();
ITestServiceA testServiceA = serviceProvider.GetService<ITestServiceA>();
ITestServiceA testServiceA1 = serviceProvider.GetService<ITestServiceA>();
bool isOK = object.ReferenceEquals(testServiceA, testServiceA1);
ServiceProvider serviceProvider1 = serviceCollection.BuildServiceProvider();
ITestServiceA testServiceA2 = serviceProvider1.GetService<ITestServiceA>();
bool isOK1 = object.ReferenceEquals(testServiceA1, testServiceA2);
以上是关于[Asp.Net Core]内置容器生命周期的主要内容,如果未能解决你的问题,请参考以下文章
asp.net core 默认 IoC 容器对象实例生命周期的问题