IStartupFilter是库向应用程序添加中间件的机制的基础。根据Docs“IStartupFilter对于确保中间件在应用程序的请求处理管道的开始或结束时由库添加的中间件之前或之后运行是有用的”。
该机制是否允许您以Startup.Configure()无法完成的任何方式操作管道?
如果这一点是模块化的,那么你似乎只是通过Startup.Configure()交换耦合来通过IServicesCollection进行耦合(需要调用DI)。在简单的情况下(根据example),可以从ConfigureServices()中删除对services.AddTransient<IStartupFilter, ...>()
的调用,并且可以添加app.AddMiddleware<MyMiddleware>()
以实现相同的功能,同时降低复杂性和魔力。
机制的要点是允许库应用哪些中间件应该包含的条件?如果是这样,它似乎缺乏asp.net核心的习惯经济和设计的清晰度。
为了回答我自己的问题,我认为主要用例是使框架能够包含构建时未知的程序集。文档在aspnetcore / Fundamentals / Host nhance an app from an external assembly in ASP.NET Core with IHostingStartup中介绍了这一点。 (虽然文档没有提到IStartupFilter,但相关的StartupDiagnostics示例项目却没有。