让我们从一个例子开始:
我在不同的分支机构上两次将mvc核心添加到asp.net核心管道。请参阅以下示例代码:
aspNetCoreApp.Map("/1", innerAspNetCoreApp => { innerAspNetCore.UseMvc(...); })
aspNetCoreApp.Map("/2", innerAspNetCoreApp => { innerAspNetCore.UseMvc(...); })
我正在关注服务配置:
services.AddMvcCore().AddJsonFormatters().AddApplicationPart(assembly1ForExample).AddControllersAsServices();
我也喜欢这样的事情:
services.AddMvcCore().AddXmlFormatters().AddApplicationPart(assembly2ForExample).AddControllersAsServices();
我想对第一个分支('/ 1')使用第一个配置,对第二个分支使用第二个配置('/ 2')
请注意,这只是一个示例,我不是在asp.net核心mvc中寻找一些可扩展性解决方案,我想在asp.net核心本身找到一个解决方案。
映像您已经开发了一个中间件来编写响应的异常详细信息。 (我知道AspNetCore.Diagnostics包,这只是一个样本。)
根据分支,你可以这样写:
aspNetCoreApp.Map("/1", innerAspNetCoreApp => { innerAspNetCore.UseBeautifulExceptionWritter(...); })
aspNetCoreApp.Map("/2", innerAspNetCoreApp => { innerAspNetCore.UseBeautifulExceptionWritter(...); })
现在让我们想象一下,我们有一个接口,可以使异常细节编写成可扩展的。例如IExceptionDetailResolver,并且有一个名为DefaultExceptionDetailResolver的默认实现。在服务配置中,我想为该中间件的每个用法注册不同的实现。
在Owin管道中,我能够使用嵌套容器实现此目的。我为整个应用程序创建了一个根容器,并为每个web api配置创建了嵌套容器。 每次我将http配置添加到管道时,我能够为asp.net web api接口注册不同的实现。例如,我能够将web api多次添加到不同分支上的owin管道,一次用于odata,一次用于asp.net web api本身正常使用,一次用于web挂钩。我能够为每个实现提供不同的IAssemblyResolver实现。
我如何在asp.net核心中实现这一目标?
附加说明:我已经设法在asp.net核心管道之上为owin管道做了这个,我也没有手动开发的asp.net核心中间件的问题。我的主要问题是一些中间件,如mvc核心,身份服务器,信号器等。