在MVC 6 alpha4中手动实例化Controller

时间:2014-10-12 13:51:05

标签: c# asp.net-mvc asp.net-core-mvc

我正在尝试使用MVC 6 alpha 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的构造函数并从MyController方法返回CreateController但我收到错误。调试器永远不会达到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()

1 个答案:

答案 0 :(得分:1)

这是答案。

首先,MyController需要继承HomeController 其次,我需要更改控制器&#39;激活控制器之前,RouteData中的值。

actionContext.RouteData.Values["controller"] = "My";