2009-05-01 4 views
0

가능한 복제를 컨트롤러 유형을 얻는 방법 :
How can I get controller type and action info from a url or from route data?이름으로

내가 컨트롤러 이름과 그들의 행동 이름의 목록을 가지고있다. 내가해야 할 일은 해당 작업에 대한 사용자 지정 특성 값을 읽는 것입니다. 문제는 컨트롤러 유형을 쉽게 얻을 수있는 방법이 없다는 것입니다. 나머지는 간단합니다. ASP.NET MVC 프레임 워크는 DefaultControllerFactory에이 기능이 있지만 프레임 워크 자체 외부에서는 액세스 할 수 없습니다. MVC 프레임 워크에 컨트롤러 유형에 대한 캐시가 있으므로 특히 복제해야 할 필요가 있기 때문에 바퀴를 재발 명하고 구현하는 것이 좋습니다. 더 좋은 해결책이 있습니까?


업데이트. Accessing the list of Controllers/Actions in an ASP.NET MVC application은 비슷하지만 다른 문제점을 설명합니다. 어떤 컨트롤러/액션이 실행될지를 결정할 필요가 없으며, 하나의 컨트롤러 유형을 얻어야합니다.

+0

다음을 살펴 보는 것이 도움이 될 수 있습니다. http://stackoverflow.com/questions/2690779/how-can-i-get-controller-type-and-action-info-from-a-url-or-from- 노선 - 데이터 – Luciano

답변

0

나는 당신이 이것을 할 필요가있는 곳에서 정말로 명확하지 않습니다. 당신이 당신의 MVC 응용 프로그램 내에서이 작업을 수행해야하는 경우 다음 당신은 당신의 자신의 컨트롤러 공장을 구현하고 거기에 코드를 넣어, 컨트롤러 유형에 키가 캐시에 결과를 저장 할 수 - 예 :

public class CustomControllerFactory : DefaultControllerFactory 
{ 
    protected override IController GetControllerInstance(Type controllerType) 
    { 
    // do something with controller attributes on controllerType here the 
    // first time a controller is seen and store the results in a 
    // static cache keyed on the controller type 

    return base.GetControllerInstance(controllerType); 
    } 
} 

을하고 그 ControllerFactory 등록 응용 프로그램 시작 (예에서 Global.asax에)에 - 다시, 나는 '또는

ControllerBuilder.Current.SetControllerFactory(new CustomControllerFactory()); 

, 당신은 단순히 "컨트롤러"로 끝나는 어셈블리의 모든 클래스에 대한보고에이 코드를 실행하는 반사를 사용할 수 있습니다 이 일이 필요한 곳에서 불분명하다.

0

리플렉션을 사용하여 어셈블리를 훑어보고 형식을 검색하고 동작을 반복하면서 흥미로운 특성의 존재를 확인하는 것이 아마도 가장 직접적인 방법 일 것입니다. MVC에서 컨트롤러 캐시에서 형식 정보를 추출 할 수있는 방법이 있는지 알아보기 위해 ASP.Net MVC에서 충분히 크롤링하지 않았습니다 ...

또는 캐시에서 개체를 요청할 수있는 경우 각 컨트롤러 유형 (및 ASP.Net MVC 컨트롤러,보다 구체적으로 컨트롤러는 구성 할 수있을만큼 저렴하거나 구성되지 않고 캐시 됨)을 사용하면 시스템의 각 컨트롤러를 검색하고 해당 유형을 검색 할 수 있습니다. 더 직접적.