ASP.NET - Unity - 从外部配置文件读取配置部分

时间:2012-02-15 19:46:36

标签: configuration unity-container

我想在我的应用中集成Unity,我希望它使用外部配置文件

Unity初始化代码是

var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = "unity.config" };
System.Configuration.Configuration configuration =
ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);

// *** problem starts here ***
var unitySection = (UnityConfigurationSection)configuration.GetSection("unity");
var container = new UnityContainer().LoadConfiguration(unitySection);

我还有一个统一的外部配置文件,命名为“unity.config”,内容如下:

<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
  <alias alias="IEmailConfigurator" type="Server.Common.Interfaces.IEmailConfigurator, Server.Common" />
  <alias alias="EmailConfigurator" type="Server.Common.EmailConfigurator, Server.Common" />

  <namespace name="Server.Common.Interfaces" />
  <namespace name="Server.Common" />

  <container>
    <register type="IEmailConfigurator" mapTo="EmailConfigurator" />
  </container>
</unity>  

问题是,在我想加载unitySection的行中,GetSection()返回null。

可能是什么问题?


修改

我添加了

<configuration>
    <configSections>
        <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/>
        </configSections>

然而,现在当我通过代码追踪时,在行

System.Configuration.Configuration configuration = //...

初始化的配置变量,FilePath属性是C:\ Program Files(x86)\ IIS Express \ unity.config,而不是我自己的unity.config文件

知道如何从web文件夹中引用配置文件吗?

谢谢。

4 个答案:

答案 0 :(得分:0)

您是否尝试将<configuration><configSections>元素添加到配置文件中?

答案 1 :(得分:0)

http://msdn.microsoft.com/en-us/library/ff660935%28v=pandp.20%29.aspx

您的外部配置文件也必须从<configuration>代码开始,而不是<unity>代码

答案 2 :(得分:0)

我不知道你是否解决了这个问题。在Visual Studio中,您必须确保“Unity.config”的以下文件属性:

  • 构建操作 - &gt; “内容”
  • 复制到输出目录 - &gt; “如果更新则复制”或“始终复制”

我建议“始终复制”以确保构建后始终存在当前的Unity配置。

答案 3 :(得分:0)

要访问Web文件夹,请使用HttpServerUtility.MapPath方法。

var mappedConfig = Server.MapPath("~/unity.config");

Server是Page的一个属性,或者使用HttpContext.Current.Server。