如何从外部配置文件获取 Unity Container?

How to get Unity Container from external configuration file?

在 asp.net web api 中使用 Unity,我可以在 UnityConfig.cs 中注册我的服务:

public static class UnityConfig
{
    public static void RegisterComponents()
    {
        var container = new UnityContainer();
        container.RegisterType<ITestService, TestService>();
        //above code needs to be read from config file

        GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
    }
}

现在,我有一个配置文件(位于项目的根目录),其中存储了所有要注册的类型:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
  <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/>
</configSections>


<unity>

  <alias alias="ITestService" type="IMyServices.ITestService, IMyServices" />

  <container>

    <register type="ITestService" mapTo="MyServices.TestService,MyServices" />
 
  </container>
</unity>
</configuration>

如何从这个文件中获取容器?

下面是一个类似的问题,但尚未解决: ASP.NET - Unity - Read configuration section from external configuration file

我找到了我的问题的解决方案,它使用 ExeConfigurationFileMap 指定文件路径并显式加载指定的配置文件。

public static class UnityConfig
{
    public static void RegisterComponents()
    {
        ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
        fileMap.ExeConfigFilename = "my/file/path";

        Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
        var section = (UnityConfigurationSection)configuration.GetSection("unity");

        IUnityContainer unityContainer = new UnityContainer();

        unityContainer.LoadConfiguration(section);

        GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(unityContainer);
    }
}