C# ASP.NET Core-重写默认ControllerFactory
我遇到了一个非常特殊的情况,我想覆盖默认的ASP.NETCoreControllerFactory。我想这样做是因为我想完全控制我处理每个请求的控制器类型 情况是: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方法上使用一些通用方法来呈现主
category.website.com
类别
,将使用通用的HomeController
,使用DI注入类别,因此类型为HomeController
HomeController
将在typeCategory
方法上使用一些通用方法来呈现主页DefaultControllerFactory
的工厂。这似乎是不可推翻的
你知道我会怎么做吗?对我们来说,最合理的选择是使用旧的ASP.NET MVC版本,它允许您设置自己的ControllerFactory,但我们将失去诸如能够使用
SpaServices
预渲染角度应用程序等功能。在调用AddMvc后,在ConfigureServices中注册您自己的实现:
services.AddSingleton<IControllerFactory, MyCustomControllerFactory>();
services.AddSingleton();
这样,无论何时构建控制器,都会调用它
为了完整性,最好的方法是实际实现IControllerActivator并注册它,因为默认控制器工厂不是公共的。它将使用已注册的IControllerActivator的任何实现来实际创建控制器类。您所寻找的答案可能与我想它可能真的很简单!通过阅读源代码,我认为这是不可能的,但这确实完成了我想要的工作。谢谢没问题!您可能希望重用DefaultControllerFactory中的实现。如果这样做,请在MyCustomControllerFactory中添加与DefaultControllerFactory相同的参数,并使用这些参数在构造函数中实例化DefaultControllerFactory的一个私有字段,以便您可以委托给它。我刚刚开始了解DefaultControllerFactory在引擎盖下的作用,所以这是一个活期储蓄器!谢谢