所有的提供程序都以某种方式派生于System.Configuration.Provider命名空间中的ProviderBase类。ProviderBase是一个抽象类,用于为继承它的提供程序定义基本模板。注意ProviderBase类包含的内容很少,如图15-3所示。
图 15-3
如前所述,这个类的内容不多。它只是提供程序的一个根类,可以让提供程序初始化它本身。
Name属性用于提供友好的名称,例如AspNetSqlRoleProvider。Description属性用于指定提供程序的文本描述,以后可能由管理工具使用。ProviderBase类中的主要项是Initialize()方法,它的构造函数如下:
public virtual void Initialize(string name,
System.Collections.Specialized.NameValueCollection config);
注意Initialize()方法的两个参数。第一个参数是name,它就是配置文件中赋予提供程序声明的name属性值。Config参数的类型是NameValueCollection,这是一个名称/值对的集合。这些名称/值对就是在配置文件的提供程序声明中定义为各种属性及其值的项。
在ASP.NET 2.0的默认安装中,每个提供程序都定义了一个可以继承的类,该类实现了ProviderBase抽象类。例如,在成员系统的模型中,SqlMembershipProvider声明继承了基实例MembershipProvider,而MembershipProvider实现了ProviderBase,该模型如图15-4所示。
图 15-4
注意,各个系统都实现了一个特定的基提供程序,以供使用。不可能用一个提供程序满足所有系统的需要。如图15-4所示,MembershipProvider实例有一些新ASP.NET 2.0成员系统所需的特定功能,其方法肯定不是角色管理系统或Web part功能所需的。
有了这些基提供程序,在创建自己的定制程序,以使用ASP.NET 2.0的成员系统时,就有两种选择:第一,可以实现ProviderBase类,从头开始创建自己的提供程序。这里不推荐这种方法,因为已经有操作各个系统的抽象类了。第二,可以实现MembershipProvider实例,以它提供的模型为基础,这是比较好的方法。如果使用某个版本的SQL Server,且只想改变该提供程序的底层行为,就可以继承SqlMembershipProvider,再修改该类的行为。下面将通过示例来介绍扩展提供程序模型的各种方式。