Читать пользовательский файл конфигурации, используя пользовательские классы конфигурации?

Есть несколько вопросов о чтении пользовательские файлы конфигурации, но ни один из них не обращается к пользовательским разделам конфигурации. Вот раздел из моего app.config:

<configuration>
    <configSections>
        <section name="DatabaseConfigSection" type="Bootstrapper.DatabaseConfig, Bootstrapper" />
    </configSections>
    <DatabaseConfigSection>
        <Configuration>
            <Databases>
                <Database name="Database_Dev" environment="Dev"/>
                <Database name="Database_RC" environment="RC"/>
                <Database name="Database_Cloud" environment=""/>
            </Databases>
        </Configuration>
    </DatabaseConfigSection>
</configuration>

И у меня есть собственный класс конфигурации, который позволяет мне кодировать его следующим образом:

DatabaseConfig.Instance.Configuration.Databases.Cast<Database>().Select(x => x.Name).ToArray();

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

ConfigurationManager.Use("otherConfigFile.config");
var new dbConfig = ConfigurationManager.GetSection(SectionSectionName) as DatabaseConfig;
dbConfig.Databases.Cast<Database>().Select(x => x.Name).ToArray();

И пусть он возвращает данные из «otherConfigFile.config» в виде объекта DatabaseConfig. Однако я не могу найти способ заставить ConfigurationManager.GetSection() указывать на другой файл. Спасибо!


person sirdank    schedule 21.12.2015    source источник


Ответы (1)


Вот что я в итоге сделал:

var map = new ExeConfigurationFileMap();
map.ExeConfigFilename = @"C:\Users\sirdank\project\bootstrapper\bin\Debug\test.config";
System.Configuration.Configuration config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
DatabaseConfig dbConfig = config.GetSection("DatabaseConfigSection") as DatabaseConfig;

Собрать с помощью MSDN

person sirdank    schedule 28.12.2015
comment
Вам было бы гораздо лучше использовать преобразования конфигурации, а не помещать все среды в одну конфигурацию. - person Erik Funkenbusch; 28.12.2015