首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

體驗 .NET 2.0 的優雅 (4):Provider 模式、策略模式、IoC 與依賴注入

     編輯:關於.NET

ASP.NET 2.0 組態檔中無處不在的 Provider(如 XmlSiteMapProvider、SqlMembershipProvider)共享同一父類別:ProviderBase。以 Membership 為例,深度剖析 Provider 模式如何結合策略模式、控制反轉 (IoC) 與依賴注入 (DI) 實現靈活可擴充的架構。

Provider 階層結構

Membership 架構圖

一、架構角色

  • LoginControls:伺服器控制項(登入、建立使用者、變更密碼)
  • Membership API:System.Web.Security.Membership 密封類別,靜態方法(CreateUser、DeleteUser 等),不提供具體實作
  • MembershipProvider:抽象類別,定義抽象方法
  • SqlMembershipProvider:具體實作,持久化至 SQL Server 2005

二、非典型策略模式

經典策略模式透過建構子注入策略。此處 Membership 為靜態類別,Provider 與 ProviderCollection 為唯讀屬性,策略實為 Provider 自行透過應用程式上下文取得。

效果:將 Membership API 對具體 Provider 的依賴,轉化為:

  1. Membership API 依賴抽象 MembershipProvider
  2. SqlMembershipProvider 依賴 MembershipProvider

符合開放封閉原則 (OCP),確保系統靈活性與效率。

三、控制反轉 (IoC)

傳統分層自底向上設計,上層直接依賴下層組件 → 底層難修改。策略模式將 MembershipProvider 抽象類別提升至上層,底層具體實作反而依賴上層抽象,依賴方向反轉。

收益:即插即用——Provider 可插拔,Provider 造成的系統問題由自身負責,不波及上層。

四、依賴注入 (DI)

自訂 Provider(如 OracleMembershipProvider)如何被 Membership API 使用?核心在執行期透過反射注入相依組件。

DI 三種形式:

  • 建構子注入
  • 屬性注入
  • 介面注入(從容器取得介面實作)

通常由 IoC 容器(如 Spring.NET)完成。但在 Membership 中,單純反射工廠即足夠,無需複雜物件裝配。

五、實際配置:零程式碼切換 Provider


<membership>
  <providers>
    <clear/>
    <add name="OracleMembershipProvider" type="Oracle.OracleMembershipProvider" />
  </providers>
</membership>

type 指定自訂 Provider 完整型別名稱(含命名空間)。僅需將組件置於 Bin 目錄、修改 Web.config,即完成 Provider 切換,零 C# 程式碼變更。

六、總結

ASP.NET 2.0 Provider 模式是策略模式 + IoC + 反射式 DI 的經典綜合應用,展現框架級設計的優雅:高內聚、低耦合、可擴充、可配置,是建構可插拔系統的標竿架構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved