2011-09-08 12 views
0

私はMEFを使用して、MVC3アプリケーションでコントローラを動的にロードしています。 は輸出メタデータでは、私は2つのメタデータ制約私の「メイン」MVCアプリで AdditionパラメータをIControllerFactory.CreateControllerに渡す

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

を指定しています、私は

[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); 
    } 
(ドロップダウン上のユーザーのクリックにREPONSEで)RedirectToActionメソッドを使用しています

コントローラ工場に希望のバージョン番号を渡すにはどうしたらいいですか? IControllerFactory.CreateController方法以来は偶然ににexceptsで:

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

答えて

1

私はあなたには、いくつかの追加のルートデータを必要と想像して、あなたのコントローラを作成するときにすることを読みます。例えば

、私はルートを定義することができます:私は私のコントローラのインスタンスを作成するとき、私はRequestContext.RouteDataコレクションからそのバージョンのアイテムをつかむことができ、

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

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 }); 
関連する問題