пятница, 11 апреля 2008 г.

ConfigurationElement serializing unrecognized attributes

Этот пост будет коротким и будет посвящен простенькой проблеме: сохранение в конфигурационном элементе неопознанных атрибутов.

Представьте себе ситуацию: некий клиентский код обращается к сервису с запросом на получение настроек, получив которые сохраняет в локальном конфиге, на случай, если при следующем старте соединения с сервисом не будет. Настройки расширяются некими элементами, которым необходимо передать некие параметры. Как сохранить в конфиг полученные параметры, число которых может меняться?

С такой ситуацией я столкнулся разрабатывая инфраструктуру для моего нового проекта. Проблема была решена быстро - достаточно было лишь взглянуть с помощью Reflector на код системы провайдеров ASP.Net, точнее на код класса ProviderSettings. У этого класса есть свойство Parameters типа NameValueCollection, которое магическим образом сериализуется в набор строковых атрибутов элемента. А делается это следующим очень просто (далее код мой). Заполняется коллекция в методе OnDeserializeUnrecognizedAttribute конфигурационного элемента, а сохраняется при помощи создания для каждого вхождения коллекции параметров ConfigurationProperty:


плюс в этом конфигурационном элементе необходимо будет перегрузить свойство Properties.

Делается это не только для того, чтобы добавить свои элементы, но и для оптимизации, т.к. код базового класса составляет коллекцию при помощи Reflection, что довольно медленно в больших классах.
Очень много информации по пространству имен System.Configuration вы можете почерпнуть в следующих статьях:
Удачи!

Комментариев нет: