将EnterpriseLibrary块配置拆分为多个文件

时间:2013-11-18 15:48:56

标签: c# configuration enterprise-library configuration-files

是否可以将企业库块的配置拆分为多个文件

例如:我有三个程序集和一个托管项目。我想在特定程序集中的单独的配置文件中存储每个程序集的entlib v6异常处理应用程序块(EHAB)配置。

托管项目引用了三个程序集:

assembly_X

  • ehabX.config

assembly_Y

  • ehabY.config

assembly_Z

  • ehabZ.config

主持项目

  • 使用ehabX.config
  • 使用ehabY.config
  • 使用ehabZ.config

我已经尝试了以下内容:

托管项目中的App.config:

<?xml version="1.0"?>
<configuration>

  <configSections>
    <section name="enterpriseLibrary.ConfigurationSource" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ConfigurationSourceSection, Microsoft.Practices.EnterpriseLibrary.Common" requirePermission="true" />
  </configSections>

  <enterpriseLibrary.ConfigurationSource>
    <sources>
      <add name="ehabX" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common" filePath="ExceptionHandling\ehabX.config" />
      <add name="ehabY" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common" filePath="ExceptionHandling\ehabY.config" />
      <add name="ehabZ" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common" filePath="ExceptionHandling\ehabZ.config" />
    </sources>
    <redirectSections>
      <add sourceName="ehabX" name="exceptionHandling" />
      <add sourceName="ehabY" name="exceptionHandling" />
      <add sourceName="ehabZ" name="exceptionHandling" />
    </redirectSections>
  </enterpriseLibrary.ConfigurationSource>

</configuration>

ehabX.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <configSections>
    <section name="exceptionHandling" type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration.ExceptionHandlingSettings, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling"/>
  </configSections>

  <exceptionHandling>
    <exceptionPolicies>
      <add name="Swallow NotImplementedException">
        <exceptionTypes>
          <add type="System.NotImplementedException, mscorlib" postHandlingAction="None" name="NotImplementedException"/>
        </exceptionTypes>
      </add>
    </exceptionPolicies>
  </exceptionHandling>

</configuration>

ehabY.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <configSections>
    <section name="exceptionHandling" type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration.ExceptionHandlingSettings, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling"/>
  </configSections>

  <exceptionHandling>
    <exceptionPolicies>
      <add name="Swallow ArgumentException">
        <exceptionTypes>
          <add type="System.ArgumentException, mscorlib" postHandlingAction="None" name="NotImplementedException"/>
        </exceptionTypes>
      </add>
    </exceptionPolicies>
  </exceptionHandling>

</configuration>

ehabZ.config被省略。

将EHAB与策略“Swallow NotImplementedException”一起使用可以正常工作。但是,如果我尝试使用ehabY.config中定义的策略“Swallow ArgumentException”,我会收到以下错误消息:

Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.ExceptionHandlingException:找不到名为“Swallow ArgumentException”的策略。异常处理已中止。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

不幸的是,没有任何开箱即可让您将多个配置源合并到一个配置集中。

我认为你可以做你想做的事,但你必须做一些编码。您需要阅读相应的配置源并创建一个将它们全部合并的自定义IConfigurationSourceAdditive merge of different config sources?有一个可以帮助你的MergeConfigurationSource示例。