use*_*223 6 c# asp.net dependency-injection asp.net-core-mvc
任何人都可以帮助我理解Asp.Net 5中的依赖注入和对象配置的上下文.
我需要了解我的服务是否实现了IDispose接口,谁将调用dispose方法.
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<IService, Service>();
services.AddScoped<IService, Service>();
services.AddSingleton<IService, Service>();
services.AddInstance<IService, Service>();
}
Run Code Online (Sandbox Code Playgroud)
IServiceCollection 包含应用程序中可用的服务集。您定义要使用的服务及其生命周期,应用程序将为您实例化并处置它们。
\n\n有 4 种不同的生命周期:
\n\n短暂的
\n\n每次请求时都会创建瞬态生命周期服务。此生命周期最适合轻量级、无状态服务。
\n\n范围
\n\n每个请求都会创建一次范围内的生命周期服务。
\n\n辛格尔顿
\n\n单例生命周期服务在第一次请求时创建,然后每个后续请求都将使用相同的实例。如果您的应用程序需要单例行为,建议允许服务容器管理服务\xe2\x80\x99s 生命周期,而不是实现单例设计模式并自己在类中管理对象\xe2\x80\x99s 生命周期。
\n\n实例
\n\n您可以选择将实例直接添加到服务容器中。如果这样做,该实例将用于所有后续请求(此技术将创建一个单例范围的实例)。实例服务和单例服务之间的一个关键区别是,实例服务是在ConfigureServices中创建的,而单例服务是在第一次请求时延迟加载的。
\n\nasp.net 5 官方文档很棒,花点时间阅读它:http://docs.asp.net/en/latest/fundamentals/dependency-injection.html
\n\n该文档没有提到依赖项注入服务如何准确处理依赖项生命周期,但如果您在代码中搜索,您将找到管理生命周期的ServiceProvider类: ServiceManager 类
\n\n更具体地说,当创建一个范围时,服务范围工厂会返回一个新的服务范围,该服务范围由服务提供者实例化。当依赖注入服务必须处置一个服务时,他调用服务范围的 dispose 方法,服务范围又调用服务提供者的 dispose 方法。
\n\n服务提供商如何运作?他在名为_resolvedServices 的属性中拥有所有服务范围,在名为_transientDisposables的属性中拥有所有瞬态可处置项。当服务提供者的 dispose() 方法被调用时,他会循环访问这两个属性中的所有项目,并为每个对象调用他的dispose方法。
\n\n您在这里拥有所有源代码:依赖注入源代码
\n| 归档时间: |
|
| 查看次数: |
1919 次 |
| 最近记录: |