【问题标题】:How to access app.config/web.config for the current Application?如何访问当前应用程序的 app.config/web.config?
【发布时间】:2011-01-07 03:03:04
【问题描述】:

虽然这个问题在名称上类似于thisthis,但实际上并非如此。

我目前正在开发一个库,可能需要根据用户的需要进行一些自定义配置。

我创建了一个自定义配置部分,一切正常。

但是,当我调试时,我注意到配置部分构造函数被调用了两次。这不是我想要的。

深入挖掘,我发现它的发生是因为,为了从库中访问配置信息,我使用了以下方法:

var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var section = config.GetSection("myConfigSection");

在此之前,.NET Framework 已经为运行该库的应用程序初始化了配置环境,从而调用了MyConfigSection 类的构造函数。

我的问题是,如何访问已经加载的信息?

为什么类的构造函数被调用两次

因为我不想像上面的代码那样重新加载所有内容。


编辑添加

构造函数被调用两次,即使将上面的代码更改为:

var section = ConfigurationManager.GetSection("myConfigSection");

编辑澄清

这个问题不是关于访问MyConfigSection,我访问它就好了。

问题是关于为什么类的构造函数被调用两次


再澄清一点

如果类的构造函数被调用两次,则加载过程发生两次。

而且我根本不希望这种情况发生。太可笑了。

是的,根据我对这个问题的第一次编辑,我正在调用 Configurationmanager 的静态方法。

【问题讨论】:

    标签: .net optimization app-config configurationmanager


    【解决方案1】:

    如果父应用程序已经加载了配置,您应该可以直接使用 static GetSection:

    ConfigurationManager.GetSection('myConfigSection');
    

    如果这不是您想要的,也许您可​​以更好地解释您的情况。您可能还对 AppSettings 感兴趣 - http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.appsettings.aspx

    【讨论】:

    • 澄清一下:问题是关于为什么类的构造函数被调用两次。
    【解决方案2】:

    你问了两个问题:为什么 ctor 被调用了两次,以及你如何访问已经加载的配置。

    您已经指出了为什么它会被调用两次。加载应用程序时,配置系统正在解析配置文件。它通过ConfigurationManager 的静态成员(包括ConfigurationManager.AppSettingConfigurationManager.GetSection())使该配置可用。

    您可以使用这些静态成员访问已加载的配置。

    【讨论】:

      【解决方案3】:

      经过进一步调查,构造函数被调用了两次,原因如下:

      1. .NET Framework 在<configSections> 元素中找到<section name="..." type="..." /> 时创建该类。
      2. 如果在app.configweb.config .NET Framework 中配置了节,则创建指定类的另一个实例来解码节并与已创建的实例合并。

      虽然它确实根据文档工作,但如果开发人员认为在应用程序的生命周期内只创建一个对象,则此行为可能与 ConfigurationSection 的实现发生冲突。

      因此,按照这种思路,如果在machine.configapp.configuser.config 中指定了配置,则该对象将被构造三次以将所有内容合并在一起。

      【讨论】:

        猜你喜欢
        • 2017-02-04
        • 1970-01-01
        • 2010-11-07
        • 2012-11-01
        • 1970-01-01
        • 2017-09-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-11
        相关资源
        最近更新 更多