gpt4 book ai didi

c# - 如何在 HostingStartup 中注册中间件?

转载 作者:行者123 更新时间:2023-12-04 12:34:07 26 4
gpt4 key购买 nike

背景
我希望通过注册插件添加额外的中间件 不改变原项目代码 ,但如何获得 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
}
}

获取方式 IApplicationBuilder对象来自 IWebHostBuilder ?

最佳答案

在官方文档中,Extend Startup with startup filters解释说 IStartupFilter 可能在这里有用:

Use IStartupFilter to configure middleware at the beginning or end of an app's Configure middleware pipeline without an explicit call to Use{Middleware}.


这是一个示例实现:
public class MyStartupFilter : IStartupFilter
{
public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
{
return app =>
{
app.UseMiddleware<MyMiddleware>();
next(applicationBuilder);
};
}
}
在这个例子中,我们添加了 MyMiddleware到管道的开头,这意味着它在管道的其余部分之前运行。运行 MyMiddleware在管道的末尾,切换 app.UseMiddleware的顺序和 next .
您还必须向 DI 容器注册此实现,如下所示:
// plugin
public class MyStartup : IHostingStartup
{
// Implement the IHostingStartup interface
public void Configure(IWebHostBuilder builder)
{
builder.ConfigureServices(services =>
{
services.AddTransient<IStartupFilter, MyStartupFilter>();
});
}
}
尽管这有效,但它并不像您可能需要的那样灵活。例如,它不允许您在应用程序添加的中间件之间注入(inject)中间件。

关于c# - 如何在 HostingStartup 中注册中间件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62990363/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com