Tia*_*Luo 4 c# middleware .net-core asp.net-core
我希望在不改变原有项目代码的情况下,通过注册插件来添加额外的中间件,但如何获取插件中IApplicationBuilder注册中间件所需的资源是我目前面临的最大问题。
根据Hosting Startup Document,该插件可以通过继承注册,并在项目启动时自动加载,例如:IHostingStartup
// plugin
public class MyStartup: IHostingStartup
{
// Implement the IHostingStartup interface
public void Configure(IWebHostBuilder builder)
{
// TODO: I want to get an IApplicationBuilder object to register middleware
}
}
Run Code Online (Sandbox Code Playgroud)
如何IApplicationBuilder通过 获取对象IWebHostBuilder?
在官方文档中,使用启动过滤器扩展启动解释了这IStartupFilter可能在这里有用:
用于
IStartupFilter在应用程序的中间件管道的开头或结尾配置中间件,Configure而无需显式调用Use{Middleware}.
这是一个示例实现:
public class MyStartupFilter : IStartupFilter
{
public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
{
return app =>
{
app.UseMiddleware<MyMiddleware>();
next(app);
};
}
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,我们将添加MyMiddleware到管道的开头,这意味着它在管道的其余部分之前运行。要在管道末尾MyMiddleware运行,请交换和的顺序。app.UseMiddlewarenext
您还必须向 DI 容器注册此实现,如下所示:
// plugin
public class MyStartup : IHostingStartup
{
// Implement the IHostingStartup interface
public void Configure(IWebHostBuilder builder)
{
builder.ConfigureServices(services =>
{
services.AddTransient<IStartupFilter, MyStartupFilter>();
});
}
}
Run Code Online (Sandbox Code Playgroud)
尽管这可行,但它并不像您可能需要的那样灵活。例如,它不允许您在应用程序添加的中间件之间注入中间件。
| 归档时间: |
|
| 查看次数: |
1779 次 |
| 最近记录: |