C# 在MVC6 alpha4中手动实例化控制器

C# 在MVC6 alpha4中手动实例化控制器,c#,asp.net-mvc,asp.net-core-mvc,C#,Asp.net Mvc,Asp.net Core Mvc,我正在用MVC6Alpha 4做一些实验。尝试手动激活控制器并返回它而不是HomeController,但这不起作用。请帮忙 到目前为止,我已经用这段代码创建了自己的控制器工厂 public class MyControllerFactory : IControllerFactory { public object CreateController(ActionContext actionContext) { var actionDescriptor = actionC

我正在用MVC6Alpha 4做一些实验。尝试手动激活控制器并返回它而不是HomeController,但这不起作用。请帮忙

到目前为止,我已经用这段代码创建了自己的控制器工厂

 public class MyControllerFactory : IControllerFactory
{
    public object CreateController(ActionContext actionContext)
    {
    var actionDescriptor = actionContext.ActionDescriptor as Microsoft.AspNet.Mvc.ReflectedActionDescriptor;

    Type controllerType = Type.GetType("Hello.Controllers.MyController");
    var controller = _typeActivator.CreateInstance(_serviceProvider, controllerType);

    actionContext.Controller = controller;
    _controllerActivator.Activate(controller, actionContext);

    return controller;
    }
}
我已经调试了代码。调用了
MyController
的构造函数,并且从
CreateController
方法返回了
MyController
,但是我得到了错误。调试器从未到达
IActionResult Index()
。这是我得到的错误

System.Reflection.TargetException: Object does not match target type.
at System.Reflection.RuntimeMethodInfo.CheckConsistency(Object target)
at System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr,      Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder,     Object[] parameters, CultureInfo culture)
at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
at Microsoft.AspNet.Mvc.ReflectedActionExecutor.<ExecuteAsync>d__2.MoveNext()
System.Reflection.TargetException:对象与目标类型不匹配。
位于System.Reflection.RuntimeMethodInfo.CheckConsistency(对象目标)
位于System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(对象对象对象、BindingFlags invokeAttr、绑定器、对象[]参数、CultureInfo区域性)
在System.Reflection.RuntimeMethodInfo.Invoke(对象obj、BindingFlags invokeAttr、绑定器绑定器、对象[]参数、CultureInfo区域性)
在System.Reflection.MethodBase.Invoke(对象obj,对象[]参数)处
在Microsoft.AspNet.Mvc.ReflectedActionExecutor.d_u2.MoveNext()上
以下是答案

首先,
MyController
需要从
HomeController
继承
其次,我需要在激活控制器之前更改RouteData中的“控制器”值

actionContext.RouteData.Values["controller"] = "My";
“代替HomeController”是什么意思?为什么不改变你的路线,这样你的“家庭控制器”就不会在这里被选中呢?