[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 容器对象实例生命周期的问题

Asp.Net Core 服务生命周期

ASP.NET Core 应用程序生命周期

如何在 asp.net core 中设置 jwt 令牌的生命周期

[Asp.Net Core]Autaofa的生命周期

[Asp.Net Core]Autaofa的生命周期