2010-08-17 53 views
0

this post有很大關係,我需要獲取控制器文件夾中所有控制器的列表。目前我們只是在嘗試一些東西。我已經通過API等搜索沒有任何運氣。我可以得到當前的控制器很好,但不幸的是沒有其他人。MonoRail - 獲取所有控制器

我不得不靜態創建實例化控制器,我想要的列表,像這樣:

public static IList<AbstractHtmlPageController> _controllers = new List<AbstractHtmlPageController> 
{ 
    new HomeController(), 
    new UserController() 
}; 

這顯然不是一個理想的解決方案。

乾杯

+0

難道你不能使用反射嗎? – 2010-08-17 08:19:29

+0

@Darin:我不知道那種功夫,到目前爲止我從來沒有用過它。 – Kezzer 2010-08-17 08:20:43

回答

1

你可以嘗試使用反射(沒有測試):

public static IList<AbstractHtmlPageController> GetControllers() 
{ 
    Assembly 
     .GetExecutingAssembly() 
     .GetTypes() 
     .Where(t => 
      t != typeof(AbstractHtmlPageController) && 
      typeof(AbstractHtmlPageController).IsAssignableFrom(t) 
     ) 
     .Select(t => (AbstractHtmlPageController)Activator.CreateInstance(t)) 
     .ToList(); 
} 

這種方法的有效性是非常令人懷疑。在應用程序的生命週期中像這樣實例化控制器可能是危險的。控制器不應該共享。將控制器的實例化保留給您正在使用的依賴注入框架。它們的壽命應該很短,最好限於當前的用戶請求。

+0

謝謝,我會很快玩這個。我從來沒有用過反射,所以這對我來說是一種學習體驗。 – Kezzer 2010-08-17 08:26:04

+0

該解決方案有效,但是一些額外的設置必須由MonoRail完成,因爲控制器上下文尚未實例化,因此控制器在調用其上的任何函數時會獲得空引用異常。將不得不在這... – Kezzer 2010-08-17 08:30:50

+0

你的評論是有效的方式,我不應該這樣做,但正如我所說的,我們現在正在試驗一些事情。乾杯! – Kezzer 2010-08-17 08:31:39