1

我想在當前項目中使用EntLib 4.1,特別是Unity 1.2和VAB。我的應用程序是一個SaaS應用程序,因此我決定將租戶特定的配置文件存儲在數據庫中,以便在租戶登錄時加載。這些文件包括VAB配置和Unity配置,以及其他租戶特定的設置。從內存中的XML字符串讀取EntLib 4.1配置

我找不到任何實際的方法來簡單地使用XML字符串作爲VAB的配置信息。

我首先想到我必須創建IConfigurationSource的自定義實現,但後來我意識到我將不得不復制已存在於FileConfigurationSource類中的解析邏輯。

接下來的想法是,我可以創建一個派生自FileConfigurationSource的新類,並且只是使用新類作爲代理來傳遞配置信息,而不是使用文件路徑傳遞字符串,但是我看不到如何覆蓋文件加載的地方。

我檢出了SqlConfigurationSource QuickStart示例,但這又不是我認爲我需要的東西。

回答

2

這裏是我想出了一個解決方案來解決這個問題:

我創建了一個新的類,XmlConfigurationSource,從IConfigurationSource得出:

public class XmlConfigurationSource : IConfigurationSource 
    { 
     private string _xml; 

     public XmlConfigurationSource(string xml) 
     { 
      _xml = xml; 
     } 
     //Other IconfigurationSource members omitted for clarity. 
     //Also, I'm not using them so I didn't implement them 

     public ConfigurationSection GetSection(string sectionName) 
     { 
      //Since my solution is specific to validation, I'm filtering for that here. 
      //This could easily be refactored for other EntLib blocks 
      //SerializableConfigurationSection object instead of XmlValidatorSettings 
      if (sectionName != "validation") 
       return null; 

      XmlValidatorSettings x = new XmlValidatorSettings(_xml.ToString()); 

      return x;    
     } 
    } 

的XmlValidatorSettings類是排序的關鍵得到這個工作。這是一個非常簡單的類從ValidationSettings派生:

public class XmlValidatorSettings : ValidationSettings 
    { 
     public XmlValidatorSettings(string configXml) 
     { 
      XDocument doc = XDocument.Parse(configXml); 
      DeserializeSection(doc.CreateReader()); 
     } 
    } 

若要使用此代碼,您需要引用EntLib常見和驗證DLL的。希望其他人從中受益!

+0

我無法量化這多少時間救了我!謝謝。 – SergioL 2014-01-22 21:02:46