繁体   English   中英

在中间件,控制器和后台服务之间共享单例

[英]Share singleton between middleware, controllers and background services

我打算将一些数据放入中间件的集合中。 我想通过控制器查看此数据。 我想通过后台服务减少此集合中的数据量。

ConfigureServices() ,我映射了一个我想与控制器,后台服务和中间件共享的Singleton。 例如:

ConcurrentQueue<string> sharedData = new ConcurrentQueue<string>();
services.AddSingleton(typeof(ConcurrentQueue<string>), sharedData);

这个单例注入我的控制器和后台服务就好了。 有人知道我如何从中间件访问此单例吗?

您的中间件上下文具有IServiceProvider属性RequestServices

例如

var queue = context.RequestServices.GetService<ConcurrentQueue<string>>();

同样,正如曾先生所指出的,当使用基于工厂的方法实现IMiddleware接口时,中间件可以具有构造函数依赖项注入。

例如

public class ConcurrentQueueMiddleware : IMiddleware
{
    private readonly ConcurrentQueue<string> _queue;

    public ConcurrentQueueMiddleware(ConcurrenQueue<string> queue)
    {
        _queue = queue;
    }

    public async Task InvokeAsync(HttpContext context, RequestDelegate next)
    {
        // do stuff with your queue

        await next(context);
    }
}

可以在官方Microsoft文档https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/middleware/extensibility?view=aspnetcore-2.0中找到更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM