Загрузить настройки в dll из файла - PullRequest
1 голос
/ 19 января 2012

В сборке библиотеки классов я добавляю несколько файлов настроек в свойствах.

Когда я добавляю новые записи в файлы настроек, значения по умолчанию сохраняются в app.config в корневом каталоге.Являясь сборкой библиотеки классов, она app.config не используется.Но я хотел бы использовать его, чтобы переопределить значения по умолчанию из файла.

Я знаю, что могу скопировать содержимое библиотеки классов app.config в файл app.config exe, но не могухочу идти по пути необходимости синхронизировать файлы вручную.

1 Ответ

2 голосов
/ 04 февраля 2012

Вы спрашиваете, как получить доступ к файлу конфигурации из DLL, которая отделена от файла конфигурации исполняемой программы?Возможно, это не очень хорошая идея, но вы можете создать свою собственную версию ConfigurationManager.Сначала создайте класс для извлечения настроек из вашего файла конфигурации (который использует XmlDocument для анализа файла конфигурации):

public sealed class Settings
{
    private readonly string settingsPath;
    private XmlDocument doc;

    private XmlDocument Doc 
    {
        get
        {
            if (doc == null)
            {
                doc = new XmlDocument();
                doc.Load(settingsPath);
            }

            return doc;
        }
    }

    public string this[string name]
    {
        get
        {
            return GetSetting(name);
        }
    }

    internal Settings()
    {
        settingsPath = @"\\path\to\app.config";
    }

    internal Settings(string settingsPath)
    {
        this.settingsPath = settingsPath;
    }

    public string GetSetting(string settingName)
    {
        return Doc.SelectSingleNode(string.Format("/configuration/settings/setting[@key='{0}']", settingName)).Attributes["value"].Value;
    }
}

Затем создайте вспомогательный класс:

public class SettingsManager
{
    private static Settings settings;

    public static Settings Settings
    {
        get
        {
            if (settings == null)
            {
                settings = new Settings();
            }

            return settings;
        }
    }
}

Итак, теперьвы можете использовать класс SettingsManager из библиотеки классов, как если бы вы использовали ConfigurationManager из консольного приложения:

SettingsManager.Settings["mysetting"]

Вот как должен выглядеть ваш файл конфигурации

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <settings>
        <setting key="mysetting" value="my value"></setting>
    </settings> 
</configuration>
...