我需要在ASP.NET中實現經典的Factory Method模式以動態地創建服務器控件。在ASP.NET中實現WebControl工廠
我發現創建.ascx控件的唯一方法是使用Page/UserControl類的LoadControl方法。然而,我發現將我的工廠鏈接到頁面或將頁面參數傳遞給工廠時很麻煩。
有沒有人知道另一種方法來創建這樣的控件(例如靜態方法,我會忽略)?
謝謝。
我需要在ASP.NET中實現經典的Factory Method模式以動態地創建服務器控件。在ASP.NET中實現WebControl工廠
我發現創建.ascx控件的唯一方法是使用Page/UserControl類的LoadControl方法。然而,我發現將我的工廠鏈接到頁面或將頁面參數傳遞給工廠時很麻煩。
有沒有人知道另一種方法來創建這樣的控件(例如靜態方法,我會忽略)?
謝謝。
最後,我決定將頁面作爲參數傳遞給工廠。要對工廠方法容易撥打電話,我改變了工廠類從單身到公共課,我通過頁面的構造器:
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;
}
}
因爲我必須初始化與每個頁面上的多個控件工廠,這可能是實現該模式的最簡潔可用的方式。
打開反射器後,在頁面中使用的LoadControl函數在任何TemplateControl中都可用。
實際的LoadControl內部使用BuildManager中的內部方法,所以我不認爲有一種方法可以在不使用反射的情況下使用靜態方法。
至少你不需要傳遞一個頁面。子類化TemplateControl將工作。