在上一篇文章中我们主要分析了ASP.NET Core默认依赖注入容器的存储和解析,这一篇文章主要补充一下上一篇文章忽略的一些细节:有关服务回收的问题,即服务的生命周期问题。有关源码可以去GitHub上找到。 这次的主角就是ServiceProvider一人,所有 ...
在上一篇文章中我们主要分析了get='_blank'>ASP.NET Core默认依赖注入容器的存储和解析,这一篇文章主要补充一下上一篇文章忽略的一些细节:有关服务回收的问题,即服务的生命周期问题。有关源码可以去GitHub上找到。
这次的主角就是ServiceProvider一人,所有有关生命周期的源码几乎都集中在ServiceProvider.cs这个文件中。
我们知道服务的生命周期由三种,分别是:
- Transient
- Scoped
- Singleton
首先给出我的结论:这三种生命周期类别本质上没有区别,服务的生命周期都是由提供服务的容器,即ServiceProvider的生命周期决定的,一个ServiceProvider被回收之后,所有由它产生的Service也随之被回收。由此看来,一个ServiceProvider起了一个ServiceScoped的作用,其实就是这样,ServiceScope本质上就是一个ServiceProvider。
1 internal class ServiceScope : IServiceScope 2 { 3 //仅有一个只读的ServiceProvider字段 4 private readonly ServiceProvider _scopedProvider; 5 6 public ServiceScope(ServiceProvider scopedProvider) 7 { 8 _scopedProvider = scopedProvider; 9 }10 11 public IServiceProvider ServiceProvider12 {13 get { return _scopedProvider; }14 }15 16 public void Dispose()17 {18 _scopedProvider.Dispose();19 }20 }
原标题:ASP.NET Core 源码阅读笔记
关键词:ASP.NET
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。