Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 如何在asp.net core中为同一中间件的多个用途注册不同的服务注册(IServiceCollection)?_Asp.net Core - Fatal编程技术网

Asp.net core 如何在asp.net core中为同一中间件的多个用途注册不同的服务注册(IServiceCollection)?

Asp.net core 如何在asp.net core中为同一中间件的多个用途注册不同的服务注册(IServiceCollection)?,asp.net-core,Asp.net Core,让我们从一个例子开始: 我已经在不同的分支上两次将mvc核心添加到asp.net核心管道中。请参见以下示例代码: aspNetCoreApp.Map("/1", innerAspNetCoreApp => { innerAspNetCore.UseMvc(...); }) aspNetCoreApp.Map("/2", innerAspNetCoreApp => { innerAspNetCore.UseMvc(...); }) 我有以下服务配置: services.AddMvcC

让我们从一个例子开始:

我已经在不同的分支上两次将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 core mvc中寻找一些可扩展性解决方案,我想在asp.net core本身中找到一个解决方案

想象一下,您已经开发了一个中间件来将异常详细信息写入响应。(我知道AspNetCore.Diagnostics包,这只是一个示例)

基于分支,您可以编写如下内容:

aspNetCoreApp.Map("/1", innerAspNetCoreApp => { innerAspNetCore.UseBeautifulExceptionWritter(...); })
aspNetCoreApp.Map("/2", innerAspNetCoreApp => { innerAspNetCore.UseBeautifulExceptionWritter(...); })
现在让我们想象一下,我们有一个接口,可以使异常详细信息的编写变得可扩展。例如IEExceptionDetailResolver,有一个名为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 core、identity server、signalr等。

我没有答案,但我认为本文可能与此相关,因为它展示了如何使用StructureMap进行多租户依赖注入。同一位作者提供了saaskit,它支持每个租户的中间件分支,因此如果您的/1和/2对应于租户,这可能会有所帮助,但目前不支持这一点。