在学习 mojoportal时,看到mojoportal调用editor使用了provider,顺便温习一下provider模式。

    How to Write a Provider Model  

    原文地址: http://dotnetslackers.com/articles/designpatterns/HowToWriteAProviderModel.aspx

    这里只是简要的学习一下,做个笔记

   自定义建立provider ,分四步

   
  • Main data provider class.
  • Data provider collection class.
  • Data provider configuration class.
  • Data provider manager class.

    第一步: Main Data Provider Class

    Main Data Provider Class  也是一个抽象类,定义了所有相关的数据操作方法。

    这个抽象的数据操作方法类必须继承自System.Configuration.Provider.ProviderBase 基类

    举例:

     1mojoportal学习笔记之How to Write a Provider Modelusing System;   
     2mojoportal学习笔记之How to Write a Provider Modelusing System.Collections.Generic;   
     3mojoportal学习笔记之How to Write a Provider Modelusing System.Linq;   
     4mojoportal学习笔记之How to Write a Provider Modelusing System.Text;   
     5mojoportal学习笔记之How to Write a Provider Modelusing System.Configuration.Provider;   
     6mojoportal学习笔记之How to Write a Provider Model  
     7mojoportal学习笔记之How to Write a Provider Modelnamespace SampleProvider   
     8 

    正如你看到的,这个main provider class 继承自ProviderBase抽象类,定义了两个抽象方法,这两个方法需要被不同的provider 实现

    你应该明白,这个main provider class 是你的provider 中抽象的方法定义的地方。

    第二步:Data Provider Collection

    provider 集合类,继承自System.Configuration.ProviderCollection基类

    ProviderCollection 类暴露了几个方法处理配置文件中定义的provider类

    关键的一点是,providerCollection类返回main provider class 一个实例

    代码如下:

     1mojoportal学习笔记之How to Write a Provider ModelListing 2: Data provider collection class 
     2mojoportal学习笔记之How to Write a Provider Modelusing System;   
     3mojoportal学习笔记之How to Write a Provider Modelusing System.Collections.Generic;   
     4mojoportal学习笔记之How to Write a Provider Modelusing System.Linq;   
     5mojoportal学习笔记之How to Write a Provider Modelusing System.Text;   
     6mojoportal学习笔记之How to Write a Provider Modelusing System.Configuration.Provider;   
     7mojoportal学习笔记之How to Write a Provider Model  
     8mojoportal学习笔记之How to Write a Provider Modelnamespace SampleProvider   
     9   

    第三步:Data Provider Configuration

    下一步工作是写一个 data provider configuration 类,用来读取配置文件

    这个类需要引用System.Configuration.ConfigSection命名空间.

    在你的配置类中,你需要定义一个类型为System.Configuraiton.ProviderSettingsCollection的属性。
    这个属性会从基类中返回一个实例。

    这个类中,所有属性必须装饰 ConfigurationProperty 标签

     1mojoportal学习笔记之How to Write a Provider Modelusing System;   
     2mojoportal学习笔记之How to Write a Provider Modelusing System.Collections.Generic;   
     3mojoportal学习笔记之How to Write a Provider Modelusing System.Linq;   
     4mojoportal学习笔记之How to Write a Provider Modelusing System.Text;   
     5mojoportal学习笔记之How to Write a Provider Modelusing System.Configuration;   
     6mojoportal学习笔记之How to Write a Provider Model  
     7mojoportal学习笔记之How to Write a Provider Modelnamespace SampleProvider   
     8  

    上面的代码中,定义了2个属性,第一个属性类型是ProviderSettingsCollection,名称是Providers
    它映射到配置文件的<providers /> 元素

    第二个方法设置了默认provider的名称,默认使用sqlProvider.


    第四步:Data Provider Manager

    这一步中你不需要继承接口或基类,只要根据你的需求来写。

    data provider Manager的主要目的是初始化一个具体的 provider类,并在内存中加载配置信息。

    初始化时,你需要为你的data provider获取配置信息,并在内存中建立一个具体的实例。

    为了使代码工作,你的Data Provider Manager类中必须包含一个静态的public Initialize方法

    代码如下:

     1mojoportal学习笔记之How to Write a Provider Modelusing System;   
     2mojoportal学习笔记之How to Write a Provider Modelusing System.Collections.Generic;   
     3mojoportal学习笔记之How to Write a Provider Modelusing System.Linq;   
     4mojoportal学习笔记之How to Write a Provider Modelusing System.Text;   
     5mojoportal学习笔记之How to Write a Provider Modelusing System.Configuration;   
     6mojoportal学习笔记之How to Write a Provider Modelusing System.Web.Configuration;   
     7mojoportal学习笔记之How to Write a Provider Model  
     8mojoportal学习笔记之How to Write a Provider Modelnamespace SampleProvider   
     9}
  • Default Sql Data Provider

     1mojoportal学习笔记之How to Write a Provider Modelusing System;   
     2mojoportal学习笔记之How to Write a Provider Modelusing System.Collections.Generic;   
     3mojoportal学习笔记之How to Write a Provider Modelusing System.Linq;   
     4mojoportal学习笔记之How to Write a Provider Modelusing System.Text;   
     5mojoportal学习笔记之How to Write a Provider Modelusing System.Data.SqlClient;   
     6mojoportal学习笔记之How to Write a Provider Modelusing System.Configuration;   
     7mojoportal学习笔记之How to Write a Provider Modelusing System.Collections.Specialized;   
     8mojoportal学习笔记之How to Write a Provider Model  
     9mojoportal学习笔记之How to Write a Provider Modelnamespace SampleProvider   
    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>


    测试代码如下:

     1mojoportal学习笔记之How to Write a Provider Model<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="SampleSite._Default" %>  
     2mojoportal学习笔记之How to Write a Provider Model  
     3mojoportal学习笔记之How to Write a Provider Model<%@ Import Namespace="SampleProvider" %>  
     4mojoportal学习笔记之How to Write a Provider Model<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   
     5mojoportal学习笔记之How to Write a Provider Model "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
     6mojoportal学习笔记之How to Write a Provider Model<html xmlns="http://www.w3.org/1999/xhtml">  
     7mojoportal学习笔记之How to Write a Provider Model  
     8mojoportal学习笔记之How to Write a Provider Model<script runat="server" language="c#">  
     9mojoportal学习笔记之How to Write a Provider Model    protected void btnAdd_Click(object sender, EventArgs e)   
    10 


     

    相关文章: