简体   繁体   English

使用 json 的 Unity IOC 配置

[英]Unity IOC configuration with json

In the app.config, it can look like below and the services and repositories are defined in a different file Unity.config.在 app.config 中,它可能如下所示,并且服务和存储库在不同的文件 Unity.config 中定义。 My question is, is it possible to do below in appsettings.json instead of app.config and Unity.json instead of Unity.config?我的问题是,是否可以在 appsettings.json 而不是 app.config 和 Unity.json 而不是 Unity.config 中执行以下操作?

app.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.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>

no it's not possible.不,这是不可能的。 there is a work around.有一个解决方法。

So what I had to do was make my own UnityContainerExtensions class, load an xml file that looks just like an app.config file, get the unity section, and convert that to a UnityConfigurationSection.所以我要做的是制作我自己的 UnityContainerExtensions class,加载一个看起来像 app.config 文件的 xml 文件,获取统一部分,然后将其转换为 UnityConfigurationSection。 code below下面的代码

MyUnityContainerExtensions.cs 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 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>

Then where I'm loading the unity configuration, I just call the new extension method.然后在我加载统一配置的地方,我只是调用新的扩展方法。

IUnityContainer container = new UnityContainer().LoadXML();

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

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