Asp.net mvc 使用自定义IControllerFactory实现在MVC 6中手动创建控制器

Asp.net mvc 使用自定义IControllerFactory实现在MVC 6中手动创建控制器,asp.net-mvc,asp.net-core-mvc,Asp.net Mvc,Asp.net Core Mvc,基于,我创建了自定义控制器工厂,用于基于某些逻辑实例化控制器(用于制作可插拔的体系结构) 出于测试目的,一切都是硬编码的 var controller = Bootstrapper.GetInstance<Controller>("TestModuleApi"); actionContext.RouteData.Values["controller"] = "TestModuleApi"; actionContext.RouteData.Values["action"] = "Ge

基于,我创建了自定义控制器工厂,用于基于某些逻辑实例化控制器(用于制作可插拔的体系结构)

出于测试目的,一切都是硬编码的

var controller = Bootstrapper.GetInstance<Controller>("TestModuleApi");

actionContext.RouteData.Values["controller"] = "TestModuleApi";
actionContext.RouteData.Values["action"] = "Get";
var returnController = _controllerActivator.Create(actionContext, controller.GetType());

return returnController;
我还尝试了非常简单的方法,使
CreateController
返回我想要的任何内容:

actionContext.RouteData.Values["controller"] = "MyApi";
actionContext.RouteData.Values["action"] = "Get";

return new MyApiController();
这里我覆盖了对
CreateController
的每个调用,以返回
MyApiController
实例。在这种情况下,
MyApiController
继承
HomeApiController
。但当我转到
/api/HomeApi/Get
时,例如,我从
HomeApiController
获取值,而不是
MyApiController

在自定义
IControllerFactory
实现中,如何实例化我们想要的任何控制器实例


更新:当我调试第一个代码时,我可以看到调用了
TestModuleApiController
的构造函数,但从未调用
Get
操作。

在第一个问题上,我可以看到问题与控制器的创建无关,但是控制器正在尝试返回一个不存在的视图。是的,
returnController
变量具有我想要的实例,但是从未调用
Get
操作。
actionContext.RouteData.Values["controller"] = "MyApi";
actionContext.RouteData.Values["action"] = "Get";

return new MyApiController();