Asp.Net如何从外部配置文件获取Unity容器?

问题描述 投票:0回答:1

在使用Unity的asp.net网络api中,我可以在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

asp.net asp.net-web-api unity-container
1个回答
0
投票

我找到了使用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);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.