【问题标题】:Reset Static fields on change in INI file在 INI 文件更改时重置静态字段
【发布时间】:2011-11-23 23:48:37
【问题描述】:

我有一个 C# 类库,它读取 INI 文件以获取参数的值 例如(调试=开启) 现在,在每次调用中,有时在一次调用中多次多次,我都必须检查这个 INI,这会导致 I/O 开销。 为了克服这个问题,我将代码中的参数设置为静态的,因此在加载时它将检查 INI 并存储结果。 但是现在我必须添加这个条件来重置您的 IIS 或终止您的 windows 窗体,以防您更改 INI 值。 注意:我不想使用配置文件 (app.config/web.config),因为这个库用于各种项目 (forms/web/services)。 因此,在您看来,在不执行 IIS 重置等的情况下,在 INI 文件更改时重置静态字段的最佳方法是什么。

【问题讨论】:

  • 如果 INI 文件被更改,为什么你必须杀死应用程序或 IIS?
  • 不要使用 GetPrivateProfileXxx(),它背后有大量的 Windows 3.x appcompat,这使得它异常缓慢。编写自己的解析器。

标签: c# .net


【解决方案1】:

有什么理由必须实际上是静态字段?我建议拥有某种配置接口,您可以将其作为依赖项传递给需要它的位。然后你可以有三个实现:

  • 用于测试的具有可写属性的“假”
  • 一种“文件读取”实现,它在构造时读取文件,然后是不可变的
  • 一种“文件监视”实现,它具有 当前 配置(以及前一个配置的实例)的概念,并在文件更改时替换其“当前”配置,通过 FileSystemWatcher。读取配置属性的调用只是委托给“当前”配置。

这种方法将带来很多更好的测试体验——无论是在您的类库中还是对于使用您的类库的代码。

如果你真的,真的需要一个你总能在配置中得到的地方,你总是可以使用上面的,但有一个引用“文件监视”实现的静态字段。

【讨论】:

    【解决方案2】:

    考虑使用FileSystemWatcher

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-15
      • 2013-06-18
      • 1970-01-01
      • 1970-01-01
      • 2012-11-04
      • 1970-01-01
      • 2018-11-29
      相关资源
      最近更新 更多