2011-09-08 131 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 });