aspx 使用什么中间件_.NET Core中间件与依赖注入的一些思考

本文探讨了ASP.NET Core中间件的生命周期,指出它们是Singleton的,并讨论了Singleton服务中注入Scoped服务可能导致的内存泄漏问题。通过示例,作者展示了如何避免这种内存泄漏,建议在中间件中使用Invoke方法注入服务或使用IServiceProvider创建子容器解析。文章还总结了Singleton、Scoped和Transient服务的生命周期特点。
摘要由CSDN通过智能技术生成

点击上方蓝字"小黑在哪里"关注我吧

1.起源?

为什么会有这篇文章呢? 源于我看了老A的aspnet core 3 框架揭秘[1]请求管道 篇产生的疑惑?

三点疑惑:

  1. Singleton服务中注入Scoped服务产生内存泄露?
  2. 关于中间件的生命周期是Singleton的?
  3. 怎么避免中间件、Singleton服务中使用Scoped服务不产生内存泄漏?

2.知识面覆盖

示例中会覆盖到aspnet core相关的配置、依赖注入(周期)、中间件的知识点,若不清楚的需要先看看这些概念以及基本使用。

收获:和我一起带着以上三个问题来进行验证也就会收获到相关知识点。

3. 测试环境准备

创建三个服务:

1. IOrderAppService(singleton)
2. IProductAppService(scoped)
3. ITransientTestAppService(transient)

创建请求控制器:

public class ProductController : Microsoft.AspNetCore.Mvc.Controller
{
    private int time = 1;
    private readonly IHostApplicationLifetime _lifetime;
    public ProductController(IProductAppService productAppService1,
        IProductAppService productAppService2,
        IOrd
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值