Нет никакого готового способа сделать это. Однако это возможно.
Несколько футов ниже, Configuration
класс использует FileStream
экземпляр, где он может использовать любой Stream
. Этот конкретный шаг можно заменить пользовательской реализацией интерфейса IInternalConfigHost
(множество свойств и методов для его реализации).
Особенно интересны OpenStreamForRead
и OpenStreamForWrite
, оба возвращают Stream
экземпляров. Там вы можете поместить логику для извлечения XML разделов конфигурации из базы данных в ConfigurationSection
экземпляров и для помещения ConfigurationSection
экземпляров в виде XML в базу данных.
Следующим шагом является создание экземпляра класса Configuration
. Однако здесь мы должны испачкаться, потому что его конструктор никогда не покидает королевство System.Configuration
. Необходимость использовать отражение, чтобы достичь и использовать его. Я предлагаю реализацию IInternalConfigConfigurationFactory
, чтобы обернуть магию отражения.
Configuration Create( Type typeConfigHost,
params object[] hostInitConfigurationParams );
В качестве первого параметра передайте тип реализованной конфигурации хоста.
После того, как у нас есть Configuration
экземпляр, мы можем использовать его для пользовательских ServiceHost
, ChannelFactory<T>
и DuplexChannelFactory<T>
.