代码之家  ›  专栏  ›  技术社区  ›  Paulo Santos

如何访问当前应用程序的app.config/web.config?

  •  1
  • Paulo Santos  · 技术社区  · 15 年前

    尽管在名义上,这个问题与 this this 不是这样。

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

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

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

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

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

    在此之前,.NET框架已经为运行库的应用程序初始化了配置环境,因此调用了 MyConfigSection 班级。

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

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

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


    编辑以添加

    即使将上述代码更改为:

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

    编辑以澄清

    这个问题不是关于访问 My组态 我可以很好地访问它。

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


    再澄清一点

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

    我只是不想发生这种事。太荒谬了。

    是的,我正在调用 Configurationmanager 根据我在这个问题上的第一次编辑。

    3 回复  |  直到 15 年前
        1
  •  0
  •   Chad    15 年前

    如果父应用程序已经加载了配置,则应该能够使用 静止的 直接从块中获取节:

    ConfigurationManager.GetSection('myConfigSection');
    

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

        2
  •  0
  •   G-Wiz RameshVel    15 年前

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

    你已经指出为什么要打两次电话了。加载应用程序时,配置系统正在分析配置文件。它可以通过 ConfigurationManager 的静态成员,包括 ConfigurationManager.AppSetting ConfigurationManager.GetSection() .

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

        3
  •  0
  •   Paulo Santos    15 年前

    经过进一步调查,由于以下情况,将调用构造函数两次:

    1. .NET框架在找到 <section name="..." type="..." /> <configSections> 元素。
    2. 如果在 app.config web.config .NET框架将创建指定类的另一个实例来解码节并与已创建的实例合并。

    尽管它确实根据文档工作,但此行为可能与 ConfigurationSection 如果开发人员认为在应用程序的生命周期中只创建了一个对象。

    因此,按照这一思路,如果在 machine.config , App.CONFIG user.config 该对象将被构造三次,以便将所有内容合并在一起。