我有一個頁面,我必須根據用戶選擇動態加載控件。 比方說,我有這樣的事情:需要重構解決方案
public static readonly Dictionary<string, string> DynamicControls = new Dictionary<string, string>
{
{ "UserCtrl1", "~/Controls/UserCtrl1.ascx" },
{ "UserCtrl2", "~/Controls/UserCtrl2.ascx" },
{ "UserCtrl3", "~/Controls/UserCtrl3.ascx" },
{ "UserCtrl4", "~/Controls/UserCtrl4.ascx"}
};
現在讓我們比在該控件加載代碼的網頁上說是這樣的:
protected void Page_Load(object sender, EventArgs e)
{
SomePanel.Controls.Add(GetControl());
}
private Control GetControl()
{
string dynamicCtrl = CurrentItem.DynamicControl;
string path = SomeClass.DynamicControls[dynamicCtrl];
Control ctrl = null;
//TODO: find a better way to load the controls
switch (dynamicCtrl)
{
case "UserCtrl1":
{
ctrl = (UserCtrl1)LoadControl(path);
}
break;
case "UserCtrl2":
{
ctrl = (UserCtrl2)LoadControl(path);
}
break;
case "UserCtrl3":
{
ctrl = (UserCtrl3)LoadControl(path);
}
break;
default:
{
throw new ApplicationException("Invalid dynamic control added.");
}
}
return ctrl;
}
頁面具有所需的註冊聲明。任何想法如何我可以擺脫這個醜陋的開關語句?
你可能也想運行在那裏的「內嵌溫度與查詢」重構..我會說nix的dynamicCtrl和CTRL變量..路徑艾滋病的可讀性,所以我會保持它。例如返回LoadControl(路徑) – Gishu 2008-11-11 10:52:12