2011-09-08 4 views
0

MEF를 사용하여 MVC3 앱에서 컨트롤러를 동적으로로드합니다. 내보내기 메타 데이터에서 나는 두 개의 메타 데이터 제약 조건 내 "주"MVC 응용 프로그램에서 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 방법은 paramters에 excepts 이후 :

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 }); 
관련 문제