我正在重构一些代码,我已经开始这样做:
protected void Page_Init(object sender, EventArgs e)
{
Logger.Info("Page Initialization.");
//Provides highlighting/docking functionality at the start, but overshadows controls in more complex scenarios.
RadDockZone1.Visible = (RadControlStates.SplitterStates.Count == 0);
ControlRegeneration.RegenerateReportMenu(lstBxHistorical, lstBxCustom);
ControlRegeneration.RegeneratePaneChildren(RadPane2);
ControlRegeneration.RegenerateDockZones(Page);
ControlRegeneration.RegenerateDocks(RadDockLayout1, RadDock_Command, UpdatePanel1);
}
我想知道将Page和Page控件传递给其他类似的函数是否是一种好习惯。
我正在考虑创建一个单例,它将保存对相关页面控件的引用,然后通过该实例访问控件。
像...一样的东西。
public class DashboardPageControlsRepository
{
private static readonly DashboardPageControlsRepository instance = new DashboardPageControlsRepository();
private DashboardPageControlsRepository() { }
private Control myPanel;
public static DashboardPageControlsRepository Instance
{
get { return instance; }
}
public void SetPageState(Page page)
{
myPanel = Utilities.FindControlRecursive(page, "UpdatePanel1")
}
public Control Panel
{
get { return myPanel; }
}
}
然后,在发生任何事情之前的页面初始化期间,我会去抓取所有控件 - 允许我通过这里访问它们而不是传递它们。
有关如何处理此问题的任何想法?
答案 0 :(得分:2)
以这种方式创建单例的问题在于静态实例将在AppDomain的生命周期中存在(直到它被回收)。最重要的是,访问单例的多个请求将试图独立地改变单例的状态。
此存储库除了作为控件引用的容器外,还提供哪些服务?
我要提到的另一件事是,不要太过专门化你的方法,你应该考虑方法设计的最不需要的类型方法,例如:你现在有:
public void SetPageSize(Page page)
该方法仅对访问Controls
类型的System.Web.UI.Control
集合非常感兴趣。您可以将方法重新定义为:
public void SetPageSize(Control control)