ChangeToken.OnChangeの罠

CI/CDとかクラウドとかまったく縁遠い中小企業にとっては.NET Framework初期のアプリの様に未だに設定ファイルをはじめ外部ファイルに大量依存、リリースも安心してできない、ブルーグリーンデプロイメントも当然できないといううれしくない状況なわけですが、そんな環境だと例えば外出しのSQLファイルだけ変えて仕様変更に対応するといったことをしたくなります。

で、.NET Coreにはファイルの変更を検知してゴニョニョするためのChangeToken.OnChangeという静的メソッドがあります。

docs.microsoft.com

ASP.NET Coreとあるがコンソールアプリでも問題ないので気にしない

簡単に実装できそうだったが、なぜか検知してくれなかった。
結論としてはIFileProviderWatchメソッドが絶対パスだとダメだったというオチだった。
なので正確にはPhysicalFileProvider.Watch(String) メソッドの仕様といったところなのかもしれない。

ChangeToken sample

Watchメソッドはglobパターンで複数のファイルをWatchできるが、変更されたファイル1つに対してのみ何かアクションを起こしたいとき1は、globパターンで使っていると都合が悪いのでそのような場合はサンプルのようにすればいいかと思います。


  1. XMLファイルをPOCOなクラスにデシリアライズして、ConcurrentDictionaryなどにキャッシュしておくとか