提供程序模型是ASP.NET 2.0中普遍采用的一个新特性,它提供了更大的扩展性。提供程序模型的概念并不是新东西,但它是第一次打包到基本的.NET Framework中。
过去,对于ASP.NET的各种服务,例如会话或高速缓存管理,在定制它们时,能插入解决方案的扩展点非常少。ASP.NET小组在2.0版本中的一个主要焦点是提供更多的扩展点,让开发人员提供ASP.NET核心功能和特性的定制实现方式。
例如,考虑会话管理功能(在ASP.NET 1.0中引入,为存储在进程、State Server和SQL Server数据库中提供了支持,但没有提供定制它的功能,也没有特别的措施)。在ASP.NET 2.0中,会话管理功能可以被完全替代,我们可以提供自己的定制数据存储器,存储任意内容。
该功能并不仅限于会话存储,在ASP.NET 2.0中还为成员、角色、配置和个性化等服务提供了几个新的提供程序。它们都使用提供程序模型的概念,都是可完全扩展的。
另外,还可以使用提供程序模型的概念,为应用程序建立自己的即插即用服务。在有不同的实现方式时,例如,一个人使用XML文件,另一个人使用SQL Server,这个技术尤其适用。它还能用于独立的软件厂商(ISV)和建立由其他公司使用的应用程序的开发人员。通过使用提供程序的概念,ISV允许其客户拥有类似的扩展点。
本章将探讨一些基本的扩展点,讨论如何使用提供程序模型创建基于提供程序的解决方案,让应用程序的终端用户或其他开发团队给基于提供程序模型的服务插入他们自己的实现方式。
3.1 什么是提供程序模型
简单地说,提供程序模型的目标是提供一种方式,让应用程序定义一组方法,通过这些方法,可以让多个实现方式交互。它还可以隐藏所使用的实现方式的应用程序知识。应用程序不知道,通过配置文件选项是使用了SQL Server实现方式,而不是简单的XML文件。
那么,为什么不使用接口呢?从技术上讲,使用接口可以为可用的方法和多个实现方式提供一个契约。但使用接口,结构比较僵化,因为接口是所提供的方法和属性的一种不可撤消的契约。提供程序模型的概念建立在继承ProviderBase类的基础之上,ProviderBase类是System.Configuration程序集的System.Configuration.Provider命名空间中的新类,它是一个抽象类,可以由提供程序的实现者继承。这个类非常简单,只提供了几个在大多数提供程序中都有用的方法和属性。表3-1列出了ProviderBase类的重要方法和属性。
表 3-1
|
属 性 |
说 明 |
|
Name |
返回提供程序的名称,从提供程序的配置项中提取<add name=“MyProviderName” /> |
|
Description |
提供程序的完整文本描述。如果给出了一组提供程序,以供选择,这个属性就很有用 |
|
方 法 |
说 明 |
|
Initialize |
用于初始化提供程序,需要给该方法传送提供程序的名称和NameValueCollection,以允许访问配置上指定的、与提供程序相关的特性 |







