我正在使用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)
答案 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 });