0

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()
4

1 に答える 1

1

これが答えです。

まず、MyControllerから継承する必要がありますHomeController
次に、コントローラーを有効にする前に、RouteData の「コントローラー」の値を変更する必要があります。

actionContext.RouteData.Values["controller"] = "My";
于 2014-10-15T08:27:51.030 に答える