C# ASP.NET Core-重写默认ControllerFactory

C# ASP.NET Core-重写默认ControllerFactory,c#,dependency-injection,asp.net-core,asp.net-core-mvc,C#,Dependency Injection,Asp.net Core,Asp.net Core Mvc,我遇到了一个非常特殊的情况,我想覆盖默认的ASP.NETCoreControllerFactory。我想这样做是因为我想完全控制我处理每个请求的控制器类型 情况是: 请求带有一个特定的子域 基于这个子域,我想解析工厂中的泛型类型控制器 例如: 调用category.website.com 我们看到它的类型为类别,将使用通用的HomeController,使用DI注入类别,因此类型为HomeController HomeController将在typeCategory方法上使用一些通用方法来呈现主

我遇到了一个非常特殊的情况,我想覆盖默认的ASP.NETCoreControllerFactory。我想这样做是因为我想完全控制我处理每个请求的控制器类型

情况是:

  • 请求带有一个特定的子域
  • 基于这个子域,我想解析工厂中的泛型类型控制器
  • 例如:

  • 调用
    category.website.com
  • 我们看到它的类型为
    类别
    ,将使用通用的
    HomeController
    ,使用DI注入类别,因此类型为
    HomeController
  • HomeController
    将在type
    Category
    方法上使用一些通用方法来呈现主页
  • 如果让我相信,应用程序启动时会注册类型为
    DefaultControllerFactory
    的工厂。这似乎是不可推翻的


    你知道我会怎么做吗?对我们来说,最合理的选择是使用旧的ASP.NET MVC版本,它允许您设置自己的ControllerFactory,但我们将失去诸如能够使用
    SpaServices
    预渲染角度应用程序等功能。

    在调用AddMvc后,在ConfigureServices中注册您自己的实现:

    services.AddSingleton<IControllerFactory, MyCustomControllerFactory>();
    
    services.AddSingleton();
    
    这样,无论何时构建控制器,都会调用它


    为了完整性,最好的方法是实际实现IControllerActivator并注册它,因为默认控制器工厂不是公共的。它将使用已注册的IControllerActivator的任何实现来实际创建控制器类。

    您所寻找的答案可能与我想它可能真的很简单!通过阅读源代码,我认为这是不可能的,但这确实完成了我想要的工作。谢谢没问题!您可能希望重用DefaultControllerFactory中的实现。如果这样做,请在MyCustomControllerFactory中添加与DefaultControllerFactory相同的参数,并使用这些参数在构造函数中实例化DefaultControllerFactory的一个私有字段,以便您可以委托给它。我刚刚开始了解DefaultControllerFactory在引擎盖下的作用,所以这是一个活期储蓄器!谢谢