如何从外部配置文件获取 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);
}
}
在 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);
}
}