当前位置:网站首页>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
边栏推荐
- Error in v-on handler: "typeerror: cannot read property 'resetfields' of undefined"
- 1-1 NodeJS
- PostgreSQL column storage and row storage
- Talk about browser cache control
- Baidu Map 3D rotation and tilt angle adjustment
- 蓝桥杯省一之路06——第十二届省赛真题第二场
- Zhongang Mining: Fluorite Flotation Process
- Baidu Map Case - modify map style
- Feign report 400 processing
- JS to find the character that appears three times in the string
猜你喜欢
Signalr can actively send data from the server to the client
Lock lock
VLAN advanced technology, VLAN aggregation, super VLAN, sub VLAN
【WPF绑定3】 ListView基础绑定和数据模板绑定
feign报400处理
Nifi fast installation and file synchronization
文件操作《二》(5000字总结篇)
扫码登录的原理你真的了解吗?
SQL database
org. apache. parquet. schema. InvalidSchemaException: A group type can not be empty. Parquet does not su
随机推荐
Detailed explanation of Niuke - Gloves
【WPF绑定3】 ListView基础绑定和数据模板绑定
Wiper component encapsulation
SPC introduction
Regular filtering of Intranet addresses and segments
Solution architect's small bag - 5 types of architecture diagrams
Paging the list collection
How much do you know about the process of the interview
[pimf] openharmony paper Club - what is the experience of wandering in ACM survey
1-1 NodeJS
Use between nodejs modules
Grpc gateway based on Ocelot
文件操作《二》(5000字总结篇)
STM32__03—初识定时器
Baidu Map 3D rotation and tilt angle adjustment
Your brain expands and shrinks over time — these charts show how
BUG_ me
Freecodecamp ---- budget & category exercise
Further optimize Baidu map data visualization
MySQL restores data through binlog file