1

我正在为基于 Web 的 CMS 平台开发一些可重用的组件,并想研究使用 Unity 而不是 Spring.NET。

在解决方案 #1 中,我在分层架构中开发了各种组件。使用 Spring.NET,我可以在其中一个程序集中嵌入一个 XML 配置文件,该文件声明哪些对象被加载到 DI 容器中。关键是组件的构建者应该决定哪些实现是组件上下文中的首选实现。

在我的其他解决方案中,我只需添加一个引用以从程序集中加载配置,然后将这些元素加载到该网站的运行容器中。

在 Unity 下,这种场景的配置策略是什么?

4

1 回答 1

1

Unity 支持XML 配置(AKA 设计时配置)和编程配置(AKA 运行时配置)。XML 配置必须遵循Unity 配置架构

开箱即用的 XML 配置与 .NET 配置挂钩,因此如果不想使用 app.config/web.config 并手动加载,我认为您必须创建自己的 ConfigurationSection 类来加载配置信息:

public class MyUnityConfigurationSection : UnityConfigurationSection
{
    public string Serialize()
    {
        return SerializeSection(null, UnityConfigurationSection.SectionName, 
            ConfigurationSaveMode.Full);
    }

    public void LoadConfigurationFile(string fileName)
    {
        Deserialize(File.ReadAllText(fileName));
    }

    public void Deserialize(string xml)
    {
        using (var sr = new StringReader(xml))
        using (var reader = XmlTextReader.Create(sr))
        {
            base.DeserializeSection(reader);
        }
    }
}

然后您可以从字符串或文件加载配置:

string configString = "<unity xmlns=\"http://schemas.microsoft.com/practices/2010/unity\">\r\n  <container>\r\n    <register type=\"IEmployee\" mapTo=\"FakeEmployee\" />\r\n    </container>\r\n</unity>";

var config = new MyUnityConfigurationSection();
config.Deserialize(configString);

IUnityContainer container = new UnityContainer();
container.LoadConfiguration(config);

您可能希望在配置程序集中创建一个方法:

public void Configure(IUnityContainer container)
{
    // internally configure the container via XML or programmatically
}
于 2012-12-30T06:28:02.123 回答