IStartupFilter 是库向应用程序添加中间件的机制的基础。根据文档“IStartupFilter 可用于确保中间件在应用程序请求处理管道的开始或结束处由库添加的中间件之前或之后运行”。
该机制是否允许您以任何无法从 Startup.Configure() 完成的方式操作管道?
如果重点是模块化,那么您似乎只是在通过 Startup.Configure() 交换耦合以通过 IServicesCollection 进行耦合(需要调用 DI)。在简单的情况下(根据示例),services.AddTransient<IStartupFilter, ...>()可以从 ConfigureServices() 中删除对 的调用,并且app.AddMiddleware<MyMiddleware>()可以添加以实现相同的功能,但复杂性和魔法更少。
该机制的要点是允许库应用关于应包含哪些中间件的条件?如果是这样,它似乎缺乏asp.net core 的习惯经济和设计的清晰度。
在简单的情况下(根据示例),可以从 ConfigureServices() 中删除对 services.AddTransient() 的调用,并且可以添加 app.AddMiddleware() 以实现相同的功能,同时降低复杂性和魔力。
这不是真的。
使用IStartupFilter和使用中间件之间有很大的区别。中间件是请求管道的一部分,这意味着它会在每个请求中执行。另一方面,IStartupFilter在应用程序启动时执行一次。
为了回答我自己的问题,我认为主要用例是使框架能够合并构建时未知的程序集。文档在 aspnetcore/Fundamentals/Host 中介绍了这一点,并通过 IHostingStartup 从 ASP.NET Core 中的外部程序集创建应用程序。(尽管文档没有提及IStartupFilter,但相关的StartupDiagnostics示例项目却提及了。
| 归档时间: |
|
| 查看次数: |
2806 次 |
| 最近记录: |