将Addition参数传递给IControllerFactory.CreateController

时间:2011-09-08 13:48:23

标签: asp.net-mvc-3 mef

我正在使用MEF在MVC3应用程序中动态加载控制器。 在导出元数据中,我指定了两个元数据约束

EX:
    [ExportMetadata("controllerName", "APSR")]
    [ExportMetadata("controllerVersion", "1.0.0.0")]

在我的“主”mvc应用程序中,我正在使用RedirectToAction方法(响应用户点击下拉菜单)

   [HttpPost]
    public ActionResult Index(Models.HomeViewModel selected)
    {
        //ViewData.Add("Version", selected.AvailableWorkflows[int.Parse(selected.SelectedWorkflow)].Version);
        return RedirectToAction("Create", selected.AvailableWorkflows[int.Parse(selected.SelectedWorkflow)].Controller);
    }

如何将所需的版本号传递给我的控制器工厂?由于IControllerFactory.CreateController方法仅排除参数:

IController IControllerFactory.CreateController(System.Web.Routing.RequestContext requestContext, string controllerName)

1 个答案:

答案 0 :(得分:1)

我想你需要一些额外的路线数据,并在创建控制器时读取它。

例如,我可以将路线定义为:

routes.MapRoute(
  "APSR_Create",
  "/apsr/{version}/create",
  new {
    controller = "APSR",
    action = "Create",
    version = "1.0.0.0"
  });

现在,当我创建控制器的实例时,我可以从RequestContext.RouteData集合中获取该版本项:

  public IController IControllerFactory.CreateController(System.Web.Routing.RequestContext requestContext, string controllerName)
  {
    string version = requestContext.RouteData["version"];

    // Create instance using metadata lookup...
  }

您只需要确保将版本作为参数传递给路径。

  return RedirectToAction(
    "Create", 
    new { version = selected.AvailableWorkflows[int.Parse(selected.SelectedWorkflow)].Version });