正在IActionFilter中获取单例服务



这可能是一个基本问题,但我找不到好的参考。

我有一个简单的过滤器,它执行得很好。

public class MyFilter: IActionFilter
{
public void OnActionExecuting(ActionExecutingContext context)
{
}

public void OnActionExecuted(ActionExecutedContext context)
{

// this fails since my singleton service is not in the collection
context.HttpContext.RequestServices
.GetRequiredService<IConnectionMultiplexer>();
}
}

当过滤器执行时,我查阅上下文。HttpContext.RequestServices,我只找到注册为作用域的服务。我是否可以将服务注册为singleton(这就是我的IConnectionMultiplexer(?

我想做的是作为管道的一部分执行DB查找,用我的客户头来增加响应的头。也欢迎其他选择。

您可以为过滤器创建一个构造函数,并可以直接访问singleton服务,对吗?

builder.Services.AddSingleton<DemoService>();
builder.Services.AddScoped<CustomFilter>();

在过滤器里。

public class CustomFilter : IActionFilter
{
private readonly DemoService _demoService;
public CustomFilter(DemoService demoService)
{
_demoService = demoService;
}
public void OnActionExecuted(ActionExecutedContext context)
{   
}
public void OnActionExecuting(ActionExecutingContext context)
{
}
}

最新更新