从文件加载dll中的设置

时间:2012-01-19 08:24:45

标签: .net settings app-config

在类库程序集中,我在属性下添加了多个设置文件。

当我在设置文件中添加新条目时,默认值存储在根目录中的app.config中。 作为类库程序集,它的app.config未被使用。但是我想使用,所以我可以覆盖文件中的默认值。

我知道我可以将类库app.config的内容复制到exe的app.config中,但我不想采取手动保持文件同步的道路。

1 个答案:

答案 0 :(得分:2)

您正在询问如何从与执行程序的配置文件分开的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;
        }
    }
}

现在您可以像使用控制台应用程序中的ConfigurationManager一样使用类库中的SettingsManager类:

SettingsManager.Settings["mysetting"]

以下是您的配置文件应该是什么样的

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