2009-05-01 106 views
0

可能重複:
How can I get controller type and action info from a url or from route data?如何通過其名稱獲取控制器類型

我有控制器的名字和他們的行動的名單。我需要做的是從這些操作的自定義屬性中讀取值。 問題是,似乎沒有簡單的方法來獲取控制器類型(其餘部分很簡單。) ASP.NET MVC框架在DefaultControllerFactory中具有此功能,但它不能在框架之外訪問。 這似乎不是一個好主意,重新發明並實現它自己,特別是因爲MVC框架緩存控制器類型,我需要複製。 有沒有更好的解決方案?


Upd。 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 2012-05-31 21:19:54

回答

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

由於您已經有了一個類型名稱列表,使用反射來遍歷程序集,檢索類型和迭代操作,檢查是否存在有趣的屬性,可能是最直接的方法。我還沒有做足夠多的ASP.Net MVC爬行,以瞭解是否有可能從MVC中的控制器緩存中提取類型信息的方法...

或者,如果您可以請求緩存中的對象每個控制器類型(以及ASP.Net MVC控制器,或者更具體地說是您的控制器,都足夠便宜,可以爲我構建或構建並緩存未知數據),檢索系統中的每個控制器並檢索它們的類型可能是更直接。

相關問題