在Enterprise Libary中的DAAB中增加一個屬性

  • 1214
  • 0

在Enterprise Libary中的DAAB中增加一個屬性

image

正常的DAAB設定只會有兩個參數 DefaultBatabase跟Name,另外還有一個Custom Provider Mappings的Node在下面很少用到

今天要教大家怎樣簡單的增加第三個參數,至於加了這參數要做啥我就管不著啦

 

我用的版本是很舊的2.0,看了一下3.1的看起來差不多,不過5.0的可能就差很多了,如果有人想改其他版本的再說吧

 

首先到Data專案下找到型別 Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings 這個是runtime時DAAB的設定內容

然後加上要客製的屬性

private const string myCustomParaProperty = "myCustomPara";
 
/// <summary>
/// 設定或取得MyCustomPara
/// </summary>
[ConfigurationProperty( myCustomParaProperty, IsRequired=false )]
public string MyCustomPara
{
    get
    {
        return this[ myCustomParaProperty ] + "";
    }
    set
    {
        this[ myCustomParaProperty ] = value;
    }
}

要注意的是在ConfigurationProperty內所設定的字串就是到時XML設定檔內所使用的,大小寫都要一樣否則就會出error

 

然後到Data.Configuration.Design專案下找到Microsoft.Practices.EnterpriseLibrary.Data.Configuration.Design.DatabaseSectionNode,這個是DAAB那個Node的內容

加上一樣要加上我們要加的屬性

private string myCustomPara;
 
/// <summary>
/// MyCustomPara
/// </summary>        
public string MyCustomPara
{
    get { return myCustomPara; }
    set
    {
        myCustomPara = value;
    }
}  

 

在來到同專案的Microsoft.Practices.EnterpriseLibrary.Data.Configuration.Design.DatabaseSectionNodeBuilder內,這個是用來生成剛剛修改的DatabaseSectionNode,所以在生成時要把設定給讀進來

在Build方法內增加一行設定

public DatabaseSectionNode Build()
{
    DatabaseSectionNode node = new DatabaseSectionNode();
 
    ProviderMappingsNode mappingsNode = new ProviderMappingsNode();
 
    foreach (DbProviderMapping mapping in databaseSettings.ProviderMappings)
    {
        mappingsNode.AddNode(new ProviderMappingNode(mapping));
    }
 
    node.AddNode(mappingsNode);
 
    //增加此行讀取設定
    node.MyCustomPara = databaseSettings.MyCustomPara;
 
    return node;
}    

 

上面那塊是讀取時使用的,在寫入時也要把設定回寫至XML設定檔中所以要找到Microsoft.Practices.EnterpriseLibrary.Data.Configuration.Design.DatabaseSectionBuilder
 
一樣在Build的方法內加入一行
 
public DatabaseSettings Build()
{
    DatabaseSettings settings = new DatabaseSettings();
    foreach (ProviderMappingNode node in hierarchy.FindNodesByType(databaseSectionNode, typeof(ProviderMappingNode)))
    {
        settings.ProviderMappings.Add(node.ProviderMapping);
    }
    if (null != databaseSectionNode.DefaultDatabase) settings.DefaultDatabase = databaseSectionNode.DefaultDatabase.Name;
 
    //增加此行寫入設定
    settings.MyCustomPara = databaseSectionNode.MyCustomPara;
 
    return settings;
}    

 

做完這些後就可以使用了

image

如果要調整該參數的分類或下方的說明文字,再回到DatabaseSectionNode添加屬性設定就可以了

隨便填值寫入後XML會長這樣

 

image