[英]Best practice for accessing Page / controls on Page from other classes?
我正在重构一些代码,我已经开始这样做了:
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; }
}
}
然后,在页面初始化之前,我会去抓取所有控件 - 允许我通过这里访问它们而不是传递它们。
有关如何处理这个问题的任何想法?
以这种方式创建单例的问题在于,静态实例将在AppDomain的生命周期中存在(直到它被回收)。 最重要的是,访问单例的多个请求将试图独立地改变单例的状态。
除了作为控件引用的容器之外,此存储库还提供哪些服务?
我要提到的另一件事是,不要太过专门化你的方法,你应该考虑方法设计中最不需要的类型方法,例如你目前有:
public void SetPageSize(Page page)
其中该方法只对访问System.Web.UI.Control
类型的Controls
集合非常感兴趣。 您可以将方法重新定义为:
public void SetPageSize(Control control)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.