当前位置:网站首页>ASP. Net core dependency injection service life cycle
ASP. Net core dependency injection service life cycle
2022-04-23 17:05:00 【begeneral】
Dependency injection services include 3 A life cycle :Transient;Scoped;Singleton
Transient: Ready to use, ready to build , Discard after use . That is to create an instance of this service every time you get an instance of this service .
Scoped: This type of service instance is saved in the current dependency injection container (IServiceProvider) On , This will be explained in detail later .
Singleton: Single case . That is, only one service instance is saved
Let's do an example demonstration , Let us have a deeper understanding of this 3 Medium life cycle
My test environment :win10+vs2019+.net core 3.1
Create a new one .NET CORE The console application , add to NuGet package :Microsoft.Extensions.DependencyInjection and Microsoft.Extensions.DependencyInjection.Abstractions
Create a new one Base class , Inherited from IDisposable Interface . In this way, we can know when the instance inherited from the base class is released
Base The code for the class is as follows :
public class Base:IDisposable
{
public Base() => Console.WriteLine($"An Instance of {GetType().Name} is created");
public void Dispose() => Console.WriteLine($"The Instance of {GetType().Name} is disposed");
}
Then define 3 Interface , Represents the service type :
public interface IBaz
{
}
public interface IBar
{
}
public interface IFoo
{
}
Definition 3 Each implementation implements this 3 Interface classes , These classes inherit from Base and IDispose
public class Baz:Base,IBaz
{
}
public class Bar:Base,IBar
{
}
public class Foo:Base,IFoo
{
}
The next in Main Function to create a dependency injection container . This container is in using Created in statement , So when using At the end of the statement execution, it will call Dispose To release this container
static void Main(string[] args)
{
using (var root = new ServiceCollection().AddTransient<IFoo, Foo>()
.AddScoped<IBar, Bar>()
.AddSingleton<IBaz, Baz>().BuildServiceProvider())
{
using (var scope = root.CreateScope())
{
var provider = scope.ServiceProvider;
provider.GetService<IFoo>();
provider.GetService<IBar>();
provider.GetService<IBaz>();
Console.WriteLine("child container is disposed");
}
Console.WriteLine("root container is disposed");
}
Console.ReadKey();
}
Let's create a root container , Then create a sub container with this root container .3 The life cycles of service instances are Transient、Scoped、Singleton. The results are as follows :
Service instances are created when obtaining service instances , However, the release of instances is not together .Bar and Foo The life cycle of Scoped and Transient,
So when the sub container is released , this 2 An instance is released .Baz The life cycle of is a single case , It is stored in the root container (root) Inside , So when the sub container is released
When , It didn't release , The root container is not released until it is released .
about ASP.NET CORE applications , It has a global root container bound to the current application IServiceProvider object . For each request processed ,ASP.NET CORE
The framework will use this root container to create a service scope based on the current request ( That is to say Scoped Life cycle ), And use the IServiceProvider Object to provide the... Required for request processing
Service instance . After the request is processed ,Scoped The instance of the life cycle is terminated , The corresponding sub container is also released .
So in the same request ,Scoped Instances of the lifecycle are created only once . You can also try , Use... In the same request GetService Get... Many times Scoped Examples of life cycles ,
Then get... In multiple requests Scoped Examples of life cycles , In this way, everyone's understanding will be more profound .
版权声明
本文为[begeneral]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204230554081977.html
边栏推荐
- Generation of barcode and QR code
- BUG_ me
- Encapsulating the logging module
- 拷贝构造函数 浅拷贝与深拷贝
- 信息摘要、数字签名、数字证书、对称加密与非对称加密详解
- Feign report 400 processing
- ◰GL-着色器处理程序封装
- Get the column name list of the table quickly in Oracle
- Expression "func" tSource, object "to expression" func "tSource, object" []
- Production environment——
猜你喜欢
Milvus 2.0 détails du système d'assurance de la qualité
SQL database
Use between nodejs modules
Sub database and sub table & shardingsphere
Zhongang Mining: Fluorite Flotation Process
STM32__03—初识定时器
Further study of data visualization
JS, entries(), keys(), values(), some(), object Assign() traversal array usage
ByteVCharts可视化图表库,你想要的我都有
Bytevcharts visual chart library, I have everything you want
随机推荐
面试百分百问到的进程,你究竟了解多少
Milvus 2.0 détails du système d'assurance de la qualité
文件操作《二》(5000字总结篇)
Mock test using postman
自定义my_strcpy与库strcpy【模拟实现字符串相关函数】
Paging SQL
Redis docker installation
Promise (I)
Document operation II (5000 word summary)
Baidu Map Case - Zoom component, map scale component
【解决报错】Error in v-on handler: “TypeError: Cannot read property ‘resetFields’ of undefined”
AIOT产业技术全景结构-数字化架构设计(8)
Detailed explanation of Niuke - Gloves
◰ GL shader handler encapsulation
Shortcut keys (multiline)
Variable length parameter__ VA_ ARGS__ Macro definitions for and logging
Bottom processing of stack memory in browser
freeCodeCamp----prob_ Calculator exercise
Copy constructor shallow copy and deep copy
feign报400处理