gpt4 book ai didi

c# - ASP.NET 5 中的依赖注入(inject)和对象处置

转载 作者:太空狗 更新时间:2023-10-29 21:43:43 27 4
gpt4 key购买 nike

任何人都可以帮助我理解 Asp.Net 5 中的依赖注入(inject)和对象处置的上下文。

我需要了解我的服务是否实现了IDispose 接口(interface),谁将调用dispose 方法。

public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<IService, Service>();
services.AddScoped<IService, Service>();
services.AddSingleton<IService, Service>();
services.AddInstance<IService, Service>();
}

最佳答案

IServiceCollection 包含您的应用程序中可用的服务集。您定义要使用的服务及其生命周期,应用程序将为您实例化和处置它们。

有 4 种不同的生命周期:

transient

每次请求时都会创建 transient 生命周期服务。此生命周期最适合轻量级、无状态服务。

作用域

范围内的生命周期服务针对每个请求创建一次。

单例

单例生命周期服务在第一次被请求时创建,然后每个后续请求都将使用相同的实例。如果您的应用程序需要单例行为,建议允许服务容器管理服务的生命周期,而不是实现单例设计模式并在类中自行管理对象的生命周期。

实例

您可以选择将实例直接添加到服务容器中。如果这样做,该实例将用于所有后续请求(该技术将创建一个 Singleton 范围的实例)。实例服务和单例服务之间的一个关键区别是实例服务是在 ConfigureServices 中创建的,而单例服务在第一次被请求时是延迟加载的。

asp.net 5 官方文档很棒,花时间阅读它:http://docs.asp.net/en/latest/fundamentals/dependency-injection.html


文档没有提到依赖项注入(inject)服务如何精确处理依赖项生命周期,但如果您在代码中搜索,您会找到管理生命周期的 ServiceProvider 类:ServiceManager class

更具体一点,当一个作用域被创建时,service scope factory 返回一个新的服务作用域,它由一个服务提供者实例化。当依赖注入(inject)服务必须处理服务时,他调用 service scope's dispose method ,谁调用 service provider's dispose method

服务提供商如何运作?他在名为 _resolvedServices 的属性中拥有所有服务范围,并在名为 _transientDisposables 的属性中拥有所有 transient 一次性用品。当调用 dispose() method of the service provider 时,他会循环处理他在这两个属性中拥有的所有项目,并为每个对象调用他的dispose 方法。

你在这里有所有的源代码:Dependency Injection source code

关于c# - ASP.NET 5 中的依赖注入(inject)和对象处置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35498839/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com