0条评论
还没有人评论过~
我希望在不改动原项目代码的前提下通过承载启动的方式注册插件来添加额外的中间件,但如何在插件中获取注册中间件所需的IApplicationBuilder
是我当前面临的最大问题。
承载启动官方文档
依据文档,通过继承IHostingStartup
可以注册插件并在项目启动时自动加载:
// 插件
public class MyStartup : IHostingStartup
{
// 实现IHostingStartup接口需要重写Configure(IWebHostBuilder)
public void Configure(IWebHostBuilder builder)
{
// TODO: 我想通过builder获取一个IApplicationBuilder对象来注册中间件
}
}
IWebHostBuilder
获取IApplicationBuilder
对象?public class RequestSetOptionsStartupFilter : IStartupFilter
{
public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
{
return builder =>
{
builder.UseMiddleware<RequestSetOptionsMiddleware>();
next(builder);
};
}
}
官方文档上有
看源码可以知道,在Iwebhostbuilder 会调用build方法生成一个webhost,在build方法中,会调用buildcommonService方法,new几个实例,就有IApplicationBuilderFactory, 然后在host初始化的时候会调用BuildApplication,然后生成IApplicationBuilder
已通过stackoverflow得到了满意的答案:论坛地址