在学习 mojoportal时,看到mojoportal调用editor使用了provider,顺便温习一下provider模式。
How to Write a Provider Model
原文地址: http://dotnetslackers.com/articles/designpatterns/HowToWriteAProviderModel.aspx)
这里只是简要的学习一下,做个笔记
自定义建立provider ,分四步
第一步: Main Data Provider Class
Main Data Provider Class 也是一个抽象类,定义了所有相关的数据操作方法。
这个抽象的数据操作方法类必须继承自System.Configuration.Provider.ProviderBase 基类
举例:
2
3
4
5
6
7
8
正如你看到的,这个main provider class 继承自
ProviderBase抽象类,定义了两个抽象方法,这两个方法需要被不同的provider 实现你应该明白,这个main provider class 是你的provider 中抽象的方法定义的地方。
第二步:Data Provider Collection
provider 集合类,继承自
System.Configuration.ProviderCollection基类ProviderCollection 类暴露了几个方法处理配置文件中定义的provider类关键的一点是,providerCollection类返回main provider class 一个实例
代码如下:
2
3
4
5
6
7
8
9
第三步:Data Provider Configuration
下一步工作是写一个 data provider configuration 类,用来读取配置文件
这个类需要引用
System.Configuration.ConfigSection命名空间.
在你的配置类中,你需要定义一个类型为System.Configuraiton.ProviderSettingsCollection的属性。
这个属性会从基类中返回一个实例。
这个类中,所有属性必须装饰 ConfigurationProperty 标签
1
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Text;
5
using System.Configuration;
6
7
namespace SampleProvider
8
上面的代码中,定义了2个属性,第一个属性类型是ProviderSettingsCollection,名称是Providers
它映射到配置文件的<providers /> 元素
第二个方法设置了默认provider的名称,默认使用sqlProvider.
第四步:Data Provider Manager
这一步中你不需要继承接口或基类,只要根据你的需求来写。
data provider Manager的主要目的是初始化一个具体的 provider类,并在内存中加载配置信息。
初始化时,你需要为你的data provider获取配置信息,并在内存中建立一个具体的实例。
为了使代码工作,你的Data Provider Manager类中必须包含一个静态的public Initialize方法
代码如下:
1
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Text;
5
using System.Configuration;
6
using System.Web.Configuration;
7
8
namespace SampleProvider
9
}
Default Sql Data Provider
2
3
4
5
6
7
8
9
10
添加配置文件
1:在<configSections> </configSections>中添加代码如下
<configSections>
<section name="SampleProvider"
type="SampleProvider.DataProviderConfiguration, SampleProvider" />
</configSections> 2<configuration > </configuration>中添加代码如下
<SampleProvider default="SqlProvider">
<providers>
<add name="SqlProvider"
type="SampleProvider.SqlDataProvider, SampleProvider"
connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DB.mdf;Integrated
curity=True;User Instance=True" />
</providers>
</SampleProvider>
测试代码如下:
2
3
4
5
6
7
8
9
10