繁体   English   中英

使用 json 的 Unity IOC 配置

[英]Unity IOC configuration with json

在 app.config 中,它可能如下所示,并且服务和存储库在不同的文件 Unity.config 中定义。 我的问题是,是否可以在 appsettings.json 而不是 app.config 和 Unity.json 而不是 Unity.config 中执行以下操作?

应用程序配置

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
        <section name="Unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" requirePermission="false" restartOnExternalChanges="true" />
    </configSections>
    <Unity configSource="Config\Unity.config"/>
    <appSettings>
        <add key="DateFormat" value="yyyyMMdd"/>
    </appSettings>
</configuration>

Unity.config

<Unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
    <alias alias="IHelpfulRepository" type="Repositories.IHelpfulRepository, Repositories" />
    <alias alias="HelpfulRepository" type="Repositories.Implementation.HelpfulRepository, Repositories" />
</Unity>

不,这是不可能的。 有一个解决方法。

所以我要做的是制作我自己的 UnityContainerExtensions class,加载一个看起来像 app.config 文件的 xml 文件,获取统一部分,然后将其转换为 UnityConfigurationSection。 下面的代码

MyUnityContainerExtensions.cs

public static class MyUnityContainerExtensions
{
    public static IUnityContainer LoadXML(this IUnityContainer container, string xmlFilePath = ".\\Config\\Unity.config")
    {
        XmlDocument doc = new XmlDocument();
        doc.Load(xmlFilePath);
        var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = xmlFilePath };
        Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
        UnityConfigurationSection section = (UnityConfigurationSection)configuration.GetSection("unity");
        return section.Configure(container, string.Empty);
    }
}

Unity.config

<configuration>
    <configSections>
        <section name="Unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Unity.Configuration" requirePermission="false" restartOnExternalChanges="true" />
    </configSections>
    <Unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
        <alias alias="IHelpfulRepository" type="Repositories.IHelpfulRepository, Repositories" />
        <alias alias="HelpfulRepository" type="Repositories.Implementation.HelpfulRepository, Repositories" />
    </Unity>
    ...
</configuration>

然后在我加载统一配置的地方,我只是调用新的扩展方法。

IUnityContainer container = new UnityContainer().LoadXML();
①如果本文未解决您的问题,请点击查看与本文相关的问题
②如果本文未解决您的问题,请向程序员专用AI小助手提问
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM