现在的位置: 首页 > 综合 > 正文

ASP.NET提供程序

2013年08月14日 ⁄ 综合 ⁄ 共 2295字 ⁄ 字号 评论关闭

提供程序模型的基本原理

      提供程序模型不是一种应用程序特征,所以最终用户是无法看见的。提供程序模型本身并不会使一个应用程序获得更丰富的内容,也不会使其运行得更快或响应更为迅速。提供程序模型是基础功能,改进了程序的架构,使开发者和架构师理解某些系统组件外部特性即可工作。同时,由于为用户提供了添加和自定义行为及设置的钩子(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里了;

抱歉!评论已关闭.