[C#].net的提供者模型

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

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

 

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

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

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

<Company personInfoProviderName="sqlProvider">
 
<PersonInfoProviders>
    
<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"/>
 
</PersonInfoProviders >
</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的属性相互对应,

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

 


 1public class CompanyProviderSection
 2{
 3  [ConfigurationProperty("personInfoProviderName")]
 4  public string PersonInfoProviderName()
 5 {
 6   get{return (string)this["personInfoProviderName"];}
 7 }

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

14
15}

 

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

 


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;
            }
        }
    }

 

 

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏