我正在编写一个配置系统,其中 app.config 文件是从分布在多个位置的各种配置片段动态构建的。该系统目前工作如下:
- Bootstrapper 构建配置文件。
- Bootstrapper 使用新的配置文件作为配置文件初始化新的 AppDomain。
- 结果,新的 AppDomain 被配置为使用新的配置文件并且一切正常。
我们希望摆脱这种多 AppDomain 方法;它增加了一层复杂性,尤其是在涉及非托管库和其他遗留代码时。
在移动到一个 AppDomain 时,工作流程将更改为:
- Bootstrapper 构建配置文件。
- Bootstrapper 将配置文件合并到自己的配置文件中。
- Bootstrapper 刷新其 ConfigurationManager 缓存。
- Bootstrapper 在同一个 AppDomain 中启动主应用程序。
似乎 ConfigurationManager 将部分缓存在内存中。例如,如果我在第 3 步之前阅读 AppSettings,我必须调用:ConfigurationManager.RefreshSection("appSettings");
事实上,我必须确保引导程序使用的任何部分都已刷新。
我能够遍历新配置文件中的所有配置部分并强制刷新它们,但是,这会强制配置管理器加载配置文件中引用的任何程序集。如果可能的话,我想推迟这个。如果有办法使 ConfigurationManager 当前在内存中的内容无效?