在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
转载请注明出处: https://home.cnblogs.com/u/zhiyong-ITNote/ 整个asp.net core管道从WebHostBuilder到WebHost到后续请求的类中,都是使用一个ServicesCollection。WebHostBuilder类中注册的服务,以及后续用户在Startup类的ConfigureServices方法中注入的服务都是在这个集成在这个ServicesCollection中。 private IServiceProvider _applicationServices; public IServiceProvider Services { get { return _applicationServices; } } 它的实例化是通过IServicesCollection接口的拓展方法BuilderServiceProvider()实例化出来的。此时的实例化也是基于该ServicesCollection中注册的服务。它的生命周期是应用程序从创建到结束的期间。也就是整个aspnet core整个管道的生命周期。asp.net core的DI框架中服务的注册和服务实例化就是从这里开始的,贯彻到整个管道中.... 根ServiceProvider的创建是在WebHostBuilder以及WebHost中,也就是aspnet core管道的创建初始时。终于aspnet core管道结束时。 非根ServiceProvider的创建是在一个中间件中,随后写入HttpContext中,也就是请求上下文。RequestServiceFeature类负责创建非根ServiceProvider: private readonly IServiceScopeFactory _scopeFactory; // 或者 private readonly IServiceProvider _serviceProvider; 是不是很眼熟?也就是我们平常创建一个新的scope的ServiceProvider的方式。对于IServiceScopeFactory接口,我之前描述过,请看《asp.net core 依赖注入实现全过程粗略剖析(3)》。如此就知道CreateScope方法的设计了。它就是为了创建一个特定范围的ServiceProvider——初始的设计原则应该是为了在每个请求中实现一个特定的ServiceProvider。 如何创建一个ServiceProvider: 总结一下aspnet core获取注册服务的实例如下: IServiceProvider.CreateScope() IWebHost.Services.GetService(typeof(IServiceScopeFactory)) 疑惑: 参考: ASP.NET Core中如影随形的”依赖注入”[上]: 从两个不同的ServiceProvider说起 蒋金楠老师的博客,每次读都有不同的收获,如果你想要探索底层的原理,那么蒋老师的博客值得深看,多看
转载请注明出处: https://home.cnblogs.com/u/zhiyong-ITNote/ |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论