asp.net - 我可以在自定义中间件中添加新的范围服务吗?

标签 asp.net asp.net-web-api asp.net-core owin-middleware

我在 Asp .Net Core 中使用 WebApi,我想知道是否/如何添加一个新的范围服务,所有后续中间件和 Controller 都可以通过依赖注入(inject)访问?还是我应该与 HttpContext.Items 共享状态?这似乎不是它的目的,因为 HttpContext 在 WebApi Controller 中根本不可用?

如果 HttpContext 或 DI 都不是正确的工具,那么我如何在请求管道中传播状态而不从一开始就创建它?

最佳答案

首先在您的 ConfigureServices(IServiceCollection services) 中添加您的范围服务

services.AddScoped<IMyService, MyService>();

然后,我知道将作用域服务注入(inject)中间件的唯一方法是将其注入(inject)中间件的 Invoke 方法
public class MyMiddleware
{
    private readonly RequestDelegate _next;

    public MyMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext httpContext, IMyService service)
    {
        service.DoSomething();
        await _next(httpContext);
    }
}

默认情况下,注入(inject) MyMiddleware 的构造函数会使其成为单例,因为它仅在启动时调用。每次调用 Invoke 并且依赖注入(inject)将获取作用域对象。

关于asp.net - 我可以在自定义中间件中添加新的范围服务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42984052/

相关文章:

c# - 从异步 ApiController 返回即时响应

javascript - Kerberos,javascript 中的 Windows 身份验证请求

c# - asp.net core依赖注入(inject)中注册类型时如何处理混合构造函数参数

asp.net - 如何阻止 ASP.NET Web api PUT 动词返回 500

asp.net - 无法检索元数据

php - 将图像解析为数据[任何语言]

asp.net - 在运行时以编程方式注册 HttpModule

dynamic - ODATA v4 中的无类型实体补丁操作

c# - 自动生成的 c# 客户端应该如何处理可以返回不同类型的 API 调用?

c# - 在 Azure Function v3 中获取连接字符串