2008-11-10 45 views
0

我需要在ASP.NET中實現經典的Factory Method模式以動態地創建服務器控件。在ASP.NET中實現WebControl工廠

我發現創建.ascx控件的唯一方法是使用Page/UserControl類的LoadControl方法。然而,我發現將我的工廠鏈接到頁面或將頁面參數傳遞給工廠時很麻煩。

有沒有人知道另一種方法來創建這樣的控件(例如靜態方法,我會忽略)?

謝謝。

回答

1

最後,我決定將頁面作爲參數傳遞給工廠。要對工廠方法容易撥打電話,我改變了工廠類從單身到公共課,我通過頁面的構造器:

public ControlsFactory 
{ 
    private Page _containingPage; 

    public ControlsFactory(Page containingPage) 
    { 
     _containingPage = containingPage; 
    } 

    public CustomControlClass GetControl(string type) 
    { 
     ... snip ... 
     CustomControlClass result = (CustomControlClass)_containingPage.LoadControl(controlLocation); 

     return result; 
    } 
} 

因爲我必須初始化與每個頁面上的多個控件工廠,這可能是實現該模式的最簡潔可用的方式。

0

打開反射器後,在頁面中使用的LoadControl函數在任何TemplateControl中都可用。

實際的LoadControl內部使用BuildManager中的內部方法,所以我不認爲有一種方法可以在不使用反射的情況下使用靜態方法。

至少你不需要傳遞一個頁面。子類化TemplateControl將工作。