到目前為止,我們使用的模組都是在同一個設定檔中,這顯然是不靈活的,我們希望每個功能模組能獨立的在一個設定檔中體現,這樣不僅易於管理,易於擴充,也易於閱讀和分類.企業庫當然考慮到了這個問題並且提供瞭解決方案,本章就是講解如何使用Configuration Application Block來將各個模組分割到獨立的設定檔中的.
和以前一樣,我們先提需求,再用執行個體做講解,這樣比較形象生動些:
1) 建立一個工程,裡面用到企業庫的Data 資料訪問模組和LogTlog模組
2) 2個模組的配置分別儲存在不同的設定檔中(Data.config和Log.config中)
3) 在程式中調用這2個模組
1. 用VS 2008建立一個控制台應用程式.接著運行EntLibConfig.exe, 選擇Blocks菜單 ,單擊Add Data Settings .並設定Connection String屬性,可以隨意設定一個連接字串,在此只做測試使用,配置好後儲存成Data.config,儲存到你的控制台程式目錄下:
2. 再開啟一個EntLibConfig.exe. 選擇Blocks菜單 ,單擊Add Logging Settings .設定如下所示,日誌模組的詳細介紹請參考我之前的文章.配置好之後儲存成Log.config,並儲存到你的控制台程式目錄下.
3. 再開啟一個EntLibConfig.exe. 選擇Blocks菜單 ,單擊Add Configuration Settings . 點擊Sources面板右上方的加號按鈕—Add Sources—Add File-based Configuration Source.設定建立好的File-based Configuration Source的Name屬性為Data ConfigurationSource.接著將File Path屬性設定為前面建立好的Data.config檔案:
4. 點擊Redirected Sections面板右上方的加號按鈕—Add Redirected Sections.設定Configuration Source的屬性為Data Configuration Source:
5. 同3,4步一樣,我們再設定Log模組的配置,最後設定如所示:
6. 好了,儲存該設定檔為App.config,同樣儲存到前面建立好的控制台程式目錄下,這時候你的程式目錄下應該有如下3個檔案啦:
7. 建立一個新的控制台應用程式,將App.config添加到程式內,並加入需要的Dll檔案:
添加引用:
using System.Configuration;
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
using Microsoft.Practices.EnterpriseLibrary.Data;
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration.Manageability;
using Microsoft.Practices.EnterpriseLibrary.Data.Configuration;
using Microsoft.Practices.EnterpriseLibrary.Logging;
8. 測試:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
using Microsoft.Practices.EnterpriseLibrary.Data;
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration.Manageability;
using Microsoft.Practices.EnterpriseLibrary.Data.Configuration;
using Microsoft.Practices.EnterpriseLibrary.Logging;
namespace test
{
class Program
{
staticvoid Main(string[] args)
{
//從Data.config設定檔擷取設定
DatabaseProviderFactory dbFactory =
new DatabaseProviderFactory(GetFileConfigurationSource("Data Configuration Source"));
Database db = dbFactory.Create("Connection String");
Console.WriteLine(db.ConnectionString);
//從Log.config的設定檔擷取設定
LogWriter lw =new LogWriterFactory(GetFileConfigurationSource("Log Configuration Source")).Create();
lw.Write("123");
}
privatestatic FileConfigurationSource GetFileConfigurationSource(string SourceName)
{
//擷取App.config
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
//擷取資源節點集合
ConfigurationSourceSection section =
(ConfigurationSourceSection)config.GetSection(ConfigurationSourceSection.SectionName);
//擷取重新導向設定檔資源配置節點
FileConfigurationSourceElement elem =
(FileConfigurationSourceElement)section.Sources.Get(SourceName);
//擷取重新導向設定檔資源
FileConfigurationSource fileSource =new FileConfigurationSource(elem.FilePath);
return fileSource;
}
}
}
9. 運行結果:
開啟rolling.log可以看見如下內容:
至此,我們就解決了前面提出的所有需求啦,我們將資料庫模組和日誌模組的配置分別建立在Data.config和Log.config檔案中,並用App.config作為字典來查詢各個模組和設定檔的從屬關係,這樣使得各個模組間的耦合度大大降低,簡化了管理.好了,Microsoft Enterprise Library的系列教程到此算是告一段落了.6,7月份要準備期考啦,考完試我再做其他的系列教程吧,請大家屆時關注,哈哈