.net 的提供者模型

來源:互聯網
上載者:User

 

使用提供者模型的好處:使用提供者模型的系統將具有很好的彈性和可擴充性。

例如你可以使用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的屬性相互對應,

然後通過這個類來或得我們的提供者到底是誰。

 

Code
 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:好,寫到這裡,但最重要的還沒寫,就是如何或得並且使用提供者。我們現在需要新增人員資訊。

 

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

    }

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.