C# 在INI文件中更改时重置静态字段

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

我有一个C#类库,它读取INI文件以获取参数值 例如,(调试=打开) 现在,在每次呼叫中,有时在一次呼叫中多次,我必须检查此INI,这会导致I/O开销。 为了克服这个问题,我将代码中的参数设置为静态,以便在加载时检查INI并存储结果。 但是现在我必须添加这个条件,在您更改INI值时重置IIS或终止windows窗体。 注意:我不想使用配置文件(app.config/web.config),因为这个库用于各种项目(forms/web/services)。 因此,您认为在INI文件中更改时重置静态字段而不进行IIS重置等操作的最佳方法是什么?我建议使用某种配置接口,您可以将其作为依赖项传递给需要它的位。然后可以有三种实现:

  • 用于测试的具有可写属性的“假”
  • 一种“文件读取”实现,它在构造时读取文件,然后是不可变的
  • 一种“文件监视”实现,具有当前配置(和前一个配置的实例)的概念,并在文件更改时通过替换其“当前”配置。读取配置属性的调用只是委托给“当前”配置
这种方法将带来更好的测试体验——无论是在类库中还是在使用类库的代码中

如果您真的、真的需要一个在配置中始终可以获得的单一位置,那么您可以始终使用上面的方法,但有一个单一的静态字段,它指的是“文件监视”实现。

有任何理由它必须是静态字段吗?我建议使用某种配置接口,您可以将其作为依赖项传递给需要它的位。然后可以有三种实现:

  • 用于测试的具有可写属性的“假”
  • 一种“文件读取”实现,它在构造时读取文件,然后是不可变的
  • 一种“文件监视”实现,具有当前配置(和前一个配置的实例)的概念,并在文件更改时通过替换其“当前”配置。读取配置属性的调用只是委托给“当前”配置
这种方法将带来更好的测试体验——无论是在类库中还是在使用类库的代码中


如果您真的需要一个在配置中始终可以获得的单一位置,您可以始终使用上述内容,但有一个静态字段,该字段引用“文件监视”实现。

如果INI文件发生更改,为什么必须终止应用程序或IIS?不要使用GetPrivateProfileXxx(),它背后有大量的Windows3.xAppCompat,这使得它的速度异常缓慢。编写自己的解析器。如果INI文件发生更改,为什么必须终止应用程序或IIS?不要使用GetPrivateProfileXxx(),它背后有大量的Windows 3.x appcompat,这使其速度异常缓慢。编写自己的解析器。