Использование System.IO.FileSystemWatcher приносит две проблемы архитектуры (и одна головная боль - безопасность). Во-первых, это невозможность заблокировать «всю конфигурацию» (статическую и повторно вычисляемую) во время изменений, а во-вторых, вопрос, где разместить поток мониторинга.
Было бы хорошо иметь рамочное событие, к сожалению, такого события нет. Но я обнаружил, что есть удобное решение - иметь пользовательский раздел конфигурации с переопределенным методом PostDeserialize. Существует некоторый риск, так как я не понимаю весь процесс, есть много мистики: экземпляр каждой секции воссоздается при каждом редактировании конфигурации ДВАЖДЫ, конструктор вызывается дважды, метод Init вызывается дважды, когда PostDeserialize - вызывается только один раз - так что хорошо для нас - но кто знает, что мы можем встретить в производстве ...
public class CustomSettings : ConfigurationSection
{
protected override void PostDeserialize()
{
base.PostDeserialize();
findCertificate(this["Thumbprint"]); // searching for certificate in windows certificate repository and setup Certificate property
}
public CustomSettings()
{
InternalProperties = new ConfigurationPropertyCollection(/*... */)
}
//...
public X509Certificate Certificate { get; private set; }
}