ASP.NET CORE如何通过承载启动注册中间件?

2020-07-30 17:06发布

问题:

目的

我希望在不改动原项目代码的前提下通过承载启动的方式注册插件来添加额外的中间件,但如何在插件中获取注册中间件所需的IApplicationBuilder是我当前面临的最大问题。
承载启动官方文档
依据文档,通过继承IHostingStartup可以注册插件并在项目启动时自动加载:

// 插件
public class MyStartup : IHostingStartup
{
    // 实现IHostingStartup接口需要重写Configure(IWebHostBuilder)
    public void Configure(IWebHostBuilder builder)
    {
        // TODO: 我想通过builder获取一个IApplicationBuilder对象来注册中间件
    }
}

核心问题

  • 如何通过IWebHostBuilder获取IApplicationBuilder对象?

回答1:

public class RequestSetOptionsStartupFilter : IStartupFilter
{
    public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
    {
        return builder =>
        {
            builder.UseMiddleware<RequestSetOptionsMiddleware>();
            next(builder);
        };
    }
}

官方文档上有



回答2:

看源码可以知道,在Iwebhostbuilder 会调用build方法生成一个webhost,在build方法中,会调用buildcommonService方法,new几个实例,就有IApplicationBuilderFactory, 然后在host初始化的时候会调用BuildApplication,然后生成IApplicationBuilder



回答3:

已通过stackoverflow得到了满意的答案:论坛地址