如何在ASP.net配置中使用动态标记名称

时间:2013-12-24 06:46:35

标签: c# asp.net web-config config

我尝试使用asp.net配置支持以下面的格式读取和编写自定义部分。

<ApplicationSettings>
    <LogFactory>
      <LogToDataBase>True</LogToDataBase>
      <LogToFile>False</LogToFile>
    </LogFactory>
    <PingPongModule>
      <UsePerformanceCounters>True</UsePerformanceCounters>
      <SaveMessagesToDatabase>True</SaveMessagesToDatabase>
    </PingPongModule>
    ..
    <AnyComponentName>
      <AnyConfigName>ConfigValue</AnyConfigName>
    </AnyComponentName>
  </ApplicationSettings>

但根据我目前所知,我应该使用类似以下格式的东西来使用自定义配置部分支持。我熟悉解析格式。

<ApplicationSettings>
    <Components>
      <Component Name="LogFactory">
        <ConfigElements>
          <ConfigElement Key="LogToDataBase" Value="True"></ConfigElement>
        </ConfigElements>
      </Component>
      <Component Name="PingPongModule">
        <ConfigElements>
          <ConfigElement Key="UsePerformanceCounters" Value="True"></ConfigElement>
          <ConfigElement Key="SaveMessagesToDatabase" Value="True"> </ConfigElement>
        </ConfigElements>
      </Component>
      ..
      <Component Name="AnyComponentName">
        <ConfigElements>
          <ConfigElement Key="AnyConfigName" Value="ConfigValue"></ConfigElement>
        </ConfigElements>
      </Component>
    </Components>
  </ApplicationSettings>

显然,它比第一种格式有更多的噪音。组件在我的应用程序中动态加载。因此&#34; AnyComponentName&#34;和&#34; AnyConfigName&#34;是变量。 我的问题是,是否可以编写自定义ConfigurationSection ..等实现来解析第一种格式? 或者换句话说,是否可以将变量用于标记名称?

如果是,您能否在c#中提供示例?

2 个答案:

答案 0 :(得分:1)

可以使ConfigurationSection适应(虚拟)任何格式,包括您提供的XML架构。

Here是一篇关于如何正确实现它的文章。

您需要实现三个类来阅读配置数据:ConfigurationElementConfigurationElementCollectionConfigurationSection

答案 1 :(得分:1)

我可以从Nopcommerce 1.8开源项目中为您提供一个 web config 文件的简要示例,让我们看看它是否有帮助。

    <configuration>
        <configSections>
            <section name="NopConfig" type="NopSolutions.NopCommerce.BusinessLogic.Configuration.NopConfig, Nop.BusinessLogic" requirePermission="false"/>
        </configSections>
        <NopConfig>
            <SqlServer ConnectionStringName="NopSqlConnection"/>
            <Cache Enabled="True"/>
            <ScheduleTasks>
                <Thread seconds="60">
                    <task name="ClearCache" type="NopSolutions.NopCommerce.BusinessLogic.Caching.ClearCacheTask, Nop.BusinessLogic" enabled="true" stopOnError="false"/>
                    <task name="KeepAlive" type="NopSolutions.NopCommerce.BusinessLogic.Utils.KeepAliveTask, Nop.BusinessLogic" enabled="true" stopOnError="false" path="keepalive/ping.ashx"/>
                </Thread>
                <Thread seconds="43200">
                    <task name="KeepFedexDelivery" type="NopSolutions.NopCommerce.BusinessLogic.Utils.KeepFedexDeliveryTask, Nop.BusinessLogic" enabled="true" stopOnError="false" path="keepalive/GetDeleiveredDate.ashx"/>
                </Thread>
            </ScheduleTasks>
        </NopConfig>
</configuration>