1

我想在我当前的项目中使用 EntLib 4.1,特别是 Unity 1.2 和 VAB。我的应用程序是 SaaS 应用程序,因此我决定将租户特定的配置文件存储在数据库中,以便在租户登录时加载。这些文件包括 VAB 配置和 Unity 配置,以及其他特定于租户的设置。

我找不到任何实用的方法来简单地使用 XML 字符串作为我的 VAB 配置信息。

我首先认为我必须创建 IConfigurationSource 的自定义实现,但后来我意识到我必须复制 FileConfigurationSource 类中已经存在的解析逻辑。

下一个想法是我可以创建一个派生自 FileConfigurationSource 的新类,并使用新类作为代理来传递配置信息而不是带有文件路径的字符串,但我看不到如何覆盖加载文件的地方。

我查看了 SqlConfigurationSource 快速入门示例,但这又不是我真正需要的。

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 回答