这可能是一个基本问题,但我找不到好的参考。
我有一个简单的过滤器,它执行得很好。
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)
{
}
}