2011-09-08 126 views
0

我正在使用MEF在MVC3应用程序中动态加载控制器。 在导出元,我指定两个元数据约束将加法参数传递给IControllerFactory.CreateController

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方法只节选于paramters:

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

回答

1

我可以想象你需要一些额外的路由数据,并读取创建控制器时。

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

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

    // Create instance using metadata lookup... 
    } 

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

现在,当我创建我的控制器的一个实例,我可以从RequestContext.RouteData集合抓住那个版本项您只需确保将版本作为参数传递给路由。

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