ASP.NET提供程序
提供程序模型的基本原理
提供程序模型不是一種應用程序特征,所以最終用戶是無法看見的。提供程序模型本身並不會使一個應用程序獲得更豐富的內容,也不會使其運行得更快或響應更為迅速。提供程序模型是基礎功能,改進了程序的架構,使開發者和架構師理解某些係統組件外部特性即可工作。同時,由於為用戶提供了添加和自定義行為及設置的鉤子(hook),提供程序模型使得用戶可以創建新的組件。實現策略模式並不會使程序變為允許對程序進行任意改動的開源項目。那僅僅意味著我們有一個簡單、優雅且有效的模式,使客戶能夠對程序的特定部分進行定製。同時,這個模式的ASP.NET實現(提供程序模型)是您能夠通過成為提供程序的特殊類(可以派生一個自己的類),對ASP.NET運行時環境的特定部分進行定製。
ASP.NET實現概述
ASP.NET提供程序模型的實現總體上由三個不同的部分組成:提供程序類、配置層和存儲層。提供程序類是加入到現有框架的組件,以預期的方式提供相應的功能。配置層提供了用於識別和實例化實際提供程序的信息。存儲層是用於數據存儲的物理介質。根據特性的不同,其可以是活動目錄(Active Directory)、Oracle/SQL Server表或XML文件等。
ASP.NET提供程序類
1.ASP.NET提供程序基類:
①MembershipProvider:成員資格提供程序的基類,用來管理用戶賬戶信息;
②ProfileProvider:個性化提供程序基類,用來永久存儲和檢索用戶的配置信息;
③RoleProvider:角色提供程序的基類,用來管理用戶角色;
④SessionStateStoreProviderBase:會話狀態存儲器提供程序的基類,這些提供程序用來把會話狀態的信息保存在持久性存儲介質中,或從中檢索會話狀態信息;
提供程序類實現客戶能夠理解的接口。通過這種方式,這些類為客戶提供了其接口承諾的功能。客戶不必知道有關接口實現的細節。這種代碼不透明性使代碼具有在不了解其他代碼的前提下,對其他代碼進行驅動的能力。在ASP.NET提供程序模型中,唯一與原有策略模式定義不同的是,使用的是基類而非接口。
ASP.NET中,提供程序類不能隻實現了某一特定接口。恰恰相反的是,提供程序類必須繼承於某個基類。每一種支持的提供程序類型都有一個基類。基類通過抽象方法定義提供程序的編程接口。
所有提供程序的基類都派生自名為ProviderBase的公共類。這個基類提供了一個可重寫的方法(Initialize),通過這個方法,運行時環境將配置文件提供的設置傳入。
提供程序模型結構圖:
提供程序執行流程圖:
2.SqlServerProvider對ASP.NET提供程序的支持:
①成員管理(SqlMembershipProvider類)
②角色管理(SqlProfileProvider類)
③個性化配置(SqlProfileProvider類)
④web部件個性化設置(SqlPersonalizationProvider類)
⑤web事件(SqlWebEventProvider類)
實際例子:使用Profile節存儲自定義字段;
當然,在使用提供程序之前,一定要使用aspnet_regsql.exe工具,開啟asp.net應用程序服務。
1.首先,在配置文件中添加提供程序節,如下:
<!--要使用到的連接字符串-->
<connectionStrings>
<add name ="SQLCON" connectionString="server=.;database=aspnetdb;user id=sa;pwd=123;"/>
</connectionStrings>
<system.web> <!--注意:在system.web節下配置-->
<!--允許匿名用戶訪問-->
<anonymousIdentification enabled ="true" />
<!--配置提供程序-->
<profile enabled ="true" defaultProvider ="SqlPro"><--在這裏聲明提供程序名字,隻要跟下麵Add節中的name相一致-->
<!--配置程序-->
<providers>
<add name ="SqlPro" type ="System.Web.Profile.SqlProfileProvider" connectionStringName="SQLCON"/>
</providers>
<!--屬性-->
<properties>
<add name ="name" serializeAs="Xml" allowAnonymous ="true"/>
</properties>
</profile>
2.新建測試頁麵;其界麵如圖:
後台代碼:
protected void btnTestProfile_Click(object sender, EventArgs e)
{
Profile.name = txtProfileName.Text;//這裏就能夠直接通過代碼智能感知獲取到自定義的字段了
}
3.點擊“測試”按鈕後,文本框裏的字段就被添加到數據庫aspnetdb裏了;
最後更新:2017-04-02 03:42:39