.net 的提供者模型

 

使用提供者模型的好处:使用提供者模型的系统将具有很好的弹性和可扩充性。

例如你可以使用sql server数据或者是Oracle数据库做为你的数据源,并且只需要改变一下web.config文件。

 

下面以一个公司的人员信息的存储进行讲解。现在我们用来存储人员信息(personInfo)的数据库是

sql server2005,考虑到以后会使用其他数据库(例如mysql,oracle),我们打算用提供者模型方式进行 系统设计。

1:web.config的配置,增加如下自定义配置节

< Company  personInfoProviderName ="sqlProvider" >
 
< PersonInfoProvider s>
    
< add  name ="sqlProvider"  type ="Company.SqlPersonInfoProvider" />
 
</ PersonInfoProviders >
</ Company >

 2: 如果以后改用其他方式进行数据存储,可以这样修改

< Company  personInfoProviderName ="mysqlProvider" >
 
< PersonInfoProviders >
  
< add  name ="sqlProvider"  type ="Company.SqlPersonInfoProvider" />
  
< add  name ="mysqlProvider"  type ="Company.MysqlPersonInfoProvider" />
 
</ PersonInfoProvider s >
</ Company >


3:还没有完,你还得在web.config里增加如下代码

< configSections >
  
< section  name ="Company"  type ="Company.CompanyProvidersSection,Company" />
</ configSections >

 以上代码必须紧跟在<configuration>的下面,否则会出错。

 4:好了,这才开始我们的c#代码,他们所在的命名空间是Company.

首先新建三个类:PersonInfoProvider,SqlPersonInfoProvider,MysqlPersonInfoProvider。

 PersonInfoProvider是个abstract类,它继承ProviderBase,它的作用是提供抽象的方法让

SqlPersonInfoProvider和MysqlPersonInfoProvider来实现。

例如你要增加或删除人员,那么你首先要在PersonInfoProvider里增加两个抽象的方法:

public abstract void DeletePerson();

public abstract void AddPerson();

这只是第一步,第二步你还得在SqlPersonInfoProvider里进行具体的实现。

 5:你还要在新建一个类:CompanyProvidersSection,这个类的属性主要是和web.config的属性相互对应,

然后通过这个类来或得我们的提供者到底是谁。

 

ContractedBlock.gif ExpandedBlockStart.gif Code
 1public class CompanyProviderSection
 2ExpandedBlockStart.gifContractedBlock.gif{
 3  [ConfigurationProperty("personInfoProviderName")]
 4  public string PersonInfoProviderName()
 5ExpandedSubBlockStart.gifContractedSubBlock.gif {
 6ExpandedSubBlockStart.gifContractedSubBlock.gif   get{return (string)this["personInfoProviderName"];}
 7 }

 8 
 9 [ConfigurationProperty("PersonInfoProviders")]
10 public ProviderSettingsCollection PersonInfoProviders
11ExpandedSubBlockStart.gifContractedSubBlock.gif {
12ExpandedSubBlockStart.gifContractedSubBlock.gif   get{return (ProviderSettingsCollection)this["PersonInfoProviders"];}
13 }

14
15}

 

6:好,写到这里,但最重要的还没写,就是如何或得并且使用提供者。我们现在需要添加人员信息。

 

ContractedBlock.gif ExpandedBlockStart.gif Code
class UseProvider
    {
        
private static PersonInfoProvider _provider;
        
private static CompanyProvidersSection _providerSection;
        
private static bool _isInitialized = false;

        
private static PersonInfoProvider Provider
        {
            
return _provider;
        }
        
        
public static void AddPerson()
       {
            Provider.AddPerson();
       }  

        
private static void Initialize()
        {
            
if(!_isInitialized)
            {
                _providerSection 
= (CompanyProvidersSection)ConfigurationManager.Getsection("Compnay");
                _provider 
= (PersonInfoProvider)ProviderHelper.InstantiateProvider(_providerSection.PersonInfoProviders[_providerSection.PersonInfoProviderName]);
                _isInitiallized 
= true;
            }
        }

    }

 

 

 

转载于:https://www.cnblogs.com/suimengsiqu/archive/2008/10/31/provider.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值