在提供者模式架構中,Message 類別扮演著「上下文」角色,負責對外暴露統一介面,並透過配置動態載入具體的提供者實作。本文深入剖析其靜態初始化、提供者載入與委派呼叫機制。
Message 類別採用靜態建構函式確保單一初始化,內部維護提供者集合與當前作用中的提供者實例:
_providers 儲存所有已載入的提供者,_provider 指向預設提供者。m_isInitialized 標記防止重複初始化。Initialize() 方法是核心載入邏輯:
MessageProvider 讀取設定。ProvidersHelper.InstantiateProviders 實例化所有提供者並加入集合。defaultProvider 設定指派當前作用提供者。private static void Initialize() {
try {
if (!m_isInitialized) {
var messageConfig = (MessageProviderConfigurationSection)ConfigurationManager.GetSection("MessageProvider");
if (messageConfig == null)
throw new ConfigurationErrorsException("找不到 MessageProvider 配置區段");
_providers = new MessageProviderCollection();
ProvidersHelper.InstantiateProviders(messageConfig.Providers, _providers, typeof(MessageProvider));
_provider = _providers[messageConfig.DefaultProvider] as MessageProvider;
m_isInitialized = true;
}
} catch (Exception ex) {
throw new Exception(ex.Message);
}
}
靜態方法 Insert 與 Get 直接委派給當前提供者,實現介面與實作分離:
public static bool Insert(MessageModel mm) => _provider.Insert(mm);
public static List<MessageModel> Get() => _provider.Get();
Message 僅負責協調,不包含具體資料邏輯。MessageProvider 並註冊配置。此實作展示了提供者模式在 ASP.NET 型態系統中的標準應用模式,適合需支援多種資料來源的企業級應用開發。