Dependency injection 对多个程序集使用Unity DI

Dependency injection 对多个程序集使用Unity DI,dependency-injection,unity-container,enterprise-library-5,Dependency Injection,Unity Container,Enterprise Library 5,我正在为基于web的CMS平台开发一些可重用组件,并希望研究使用Unity而不是Spring.NET 在解决方案1中,我在分层体系结构中开发了各种组件。使用Spring.NET,我可以在其中一个程序集中嵌入一个XML配置文件,该文件声明加载到DI容器中的对象。要点是,组件的构建者应该决定哪些实现是组件上下文中的首选实现 在我的其他解决方案中,我只需添加一个引用以从程序集加载配置,然后将这些元素加载到该网站的运行容器中 在Unity下,这种场景的配置策略是什么?Unity同时支持(又名设计时配置)

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

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

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

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

Unity同时支持(又名设计时配置)和(又名运行时配置)。必须遵循XML配置

开箱即用的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);
Unity同时支持(又名设计时配置)和(又名运行时配置)。必须遵循XML配置

开箱即用的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);

对于String.NET以外的任何东西,注册的首选方法是使用基于代码的注册。对于String.NET以外的任何东西,注册的首选方法是使用基于代码的注册。这是一个有趣的想法…是否可以添加配置部分,例如,指示unity从给定文件夹加载所有配置文件?这是一个有趣的想法……是否可以添加一个配置节,并指示unity从给定文件夹加载所有配置文件?