幾十個全局對象,共有 3 屬性 2 方法,各有獨有屬性/方法。需程序啟動初始化,全局可訪問,避免窗口間傳遞參數。
// 基類
public abstract class BaseCtrl {
public string XName { get; set; }
public void DoCommon() { ... }
}
// 具體類
public class Ctrl1 : BaseCtrl { public string PropA { get; set; } }
public class Ctrl2 : BaseCtrl { public int PropB { get; set; } }
// 單例管理器
public sealed class CtrlManager {
private static readonly Lazy<CtrlManager> _instance = new Lazy<CtrlManager>(() => new CtrlManager());
public static CtrlManager Instance => _instance.Value;
public Ctrl1 Ctrl1 { get; } = new Ctrl1 { XName = "name1" };
public Ctrl2 Ctrl2 { get; } = new Ctrl2 { XName = "name2" };
// ... 幾十個屬性
private CtrlManager() {
// 統一初始化邏輯
foreach (var ctrl in GetAllCtrls()) ctrl.DoCommon();
}
private IEnumerable<BaseCtrl> GetAllCtrls() {
yield return Ctrl1;
yield return Ctrl2;
// ...
}
}
// 任何窗口使用
CtrlManager.Instance.Ctrl1.DoCommon();
CtrlManager.Instance.Ctrl2.PropB = 100;
Lazy<T> 保證單例唯一性。CtrlManager.Instance.Ctrl1 智能提示,避免字符串鍵誤寫。若專案已用 Autofac/Unity/MS DI,註冊為 SingleInstance(),構造函數注入即可,更符合現代架構。