Существует ли простой способ доступа к пользовательским данным конфигурации на основе System.Configuration через поточно-ориентированный интерфейс, не требующий от каждого контекста выполнения загрузки / перезагрузки информации о конфигурации, которая была бы обременительной в вычислительном отношении?
Классы System.Configuration, как и большинство (все?) Других классов в документации библиотеки Microsoft .Net, снабжены следующей информацией о безопасности потоков:
Любые открытые статические (Shared в Visual Basic) члены этого типа являются поточно-ориентированными.
Ни один из членов экземпляра не гарантированно является потокобезопасным.
Насколько я понимаю, объекты ConfigurationSection
, возвращаемые из ConfigurationManager.GetSection(string)
и других подобных методов (например, OpenExeConfiguration(string exePath).GetSection(string)
), не должны считаться поточно-ориентированными и, следовательно, не должны использоваться в нескольких контекстах выполнения. Это запрещает хранить ConfigurationSection
в одиночном объекте, который в противном случае был бы потокобезопасным, поскольку, хотя доступ к объекту section может быть безопасным, члены самого объекта не являются безопасными.
Однако для нескольких вызовов GetSection
, вероятно, потребуется повторный анализ файлов конфигурации и выделение новых экземпляров ConfigurationSection
, которые требуют больших затрат, учитывая, что конфигурация вряд ли когда-либо изменится после инициализации. Кроме того, копирование данных конфигурации в другой объект, который стал поточнобезопасным, похоже, сводит на нет одно из главных преимуществ использования встроенного пакета конфигурации в первую очередь (легкий доступ к преобразованным типам и проверенной информации о конфигурации без большого количества шаблонов). код).
Итак, есть ли способ использовать System.Configuration
в поточно-ориентированном режиме, не прибегая к избыточному анализу и выделению разделов конфигурации? Осуществляет ли ваша собственная ConfigurationSection
освобождение от отсутствия гарантии, предоставляемой Microsoft, несмотря на то, что вы получаете к ней доступ через интерфейсы System.Configuration
(и если да, то как бы вы реализовали ее как поточно-ориентированную при доступе к базе Для доступа к сконфигурированным данным требуется индексатор ConfigurationSection
)?