1

現在のプロジェクト、特に Unity 1.2 と VAB で EntLib 4.1 を使用したいと考えています。私のアプリケーションは SaaS アプリケーションであるため、テナント固有の構成ファイルをデータベースに保存し、テナントのサインイン時にロードすることにしました。これらのファイルには、VAB 構成と Unity 構成、およびその他のテナント固有の設定が含まれます。

XML 文字列を VAB の構成情報として単純に使用する実用的な方法が見つかりません。

最初は、IConfigurationSource のカスタム実装を作成する必要があると考えていましたが、FileConfigurationSource クラスに既に存在する解析ロジックを複製する必要があることに気付きました。

次に考えたのは、FileConfigurationSource から派生する新しいクラスを作成し、新しいクラスをプロキシとして使用して、ファイル パスを含む文字列の代わりに構成情報を渡すことでしたが、オーバーライドする方法がわかりませんでした。ファイルをロードする場所。

SqlConfigurationSource QuickStart サンプルを確認しましたが、これも実際には必要だとは思いません。

4

1 に答える 1

2

この問題を解決するために私が思いついた解決策は次のとおりです。

IConfigurationSourceから派生した新しいクラスXmlConfigurationSourceを作成しました。

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を参照する必要があります。他の人がこれから恩恵を受けることを願っています!

于 2009-12-16T16:03:49.917 に答える