Есть ли способ убедиться, что библиотека классов использует свои собственные настройки приложения? - PullRequest
11 голосов
/ 19 мая 2011

В данный момент у меня есть библиотека классов, и ей понадобятся свои собственные наборы приложений, и, вероятно, потребуется изменить их и все такое.

Единственная проблема заключается в том, что класс будет вызываться веб-приложением, в котором есть файл appsettings, который также имеет идентичные ключи для настроек приложения библиотеки классов.

Я хотел бы убедиться, что библиотека классов использует свой собственный файл appsettings, а также не вносит изменений в настройки приложения веб-приложения.

Возможно ли это? Кажется, что любая сборка может изменить настройки приложения через ConfigurationManager.

РЕДАКТИРОВАТЬ - Для обеспечения контекста библиотека классов обращается к сборке уровня данных (которую я не могу изменить), которая использует значение в appSettings для получения строки подключения. Единственная проблема заключается в том, что ключ совпадает со строкой подключения веб-приложения (которая может иметь или не иметь другое значение).

Я не хочу, чтобы библиотека классов изменила значение appSetting для этого ключа и затем веб-приложение начало доступ к другой базе данных.

Ответы [ 5 ]

1 голос
/ 24 мая 2011

Назовите ваш конфигурационный файл, как показано ниже, и поместите его в ту же папку, что и ваша сборка: [AssemblyName] .dll.config

Обновление: Может быть использовано все, что не подходит. Вы также используете AppSettingsReader (http://msdn.microsoft.com/en-us/library/system.configuration.appsettingsreader.aspx) для создания пользовательских настроек.

например:

<configuration>
  <appSettings>
    <add key="YourCustomSetting" value="10240" />
  </appSettings>

  <system.diagnostics>
    ...
  </system.diagnostics>

  <connectionStrings>...
  <system.web>...
  etc, etc.
</configuration>
1 голос
/ 19 мая 2011

Вы можете использовать ConfigurationManager.OpenMappedExeConfiguration, чтобы получить конфигурацию для конкретного файла из вашей библиотеки классов.

 // Map the new configuration file.
 var configFileMap = new ExeConfigurationFileMap();
 configFileMap.ExeConfigFilename = configFile;

 // Get the mapped configuration file
 Configuration config = ConfigurationManager.OpenMappedExeConfiguration(
    configFileMap, ConfigurationUserLevel.None);

Здесь config предоставит вам доступ к AppSettings, ConnectionStrings и Sections.Вы могли бы создать абстракцию поверх доступа к ConfigurationManager, чтобы вы могли контролировать его доступ и тем самым сделать его более тестируемым, но это зависит от дизайна.в одном из ваших ответов иногда есть способы обойти это.Скорее всего, этот класс помечен как частичный, который можно инициализировать с правильным объектом «Конфигурация» и, следовательно, с правильной строкой подключения

1 голос
/ 19 мая 2011

Существует нет способ сделать это.Просто так не работает .NET.

Учтите, что библиотека классов может использоваться в двух отдельных приложениях.Каждому приложению могут потребоваться разные настройки для одной и той же библиотеки классов.Это работает только в том случае, если не использует файл конфигурации из библиотеки классов.

1 голос
/ 19 мая 2011

Вместо использования файла app / web.config рассмотрите возможность создания собственного класса настроек, который наследуется от System.Configuration.SettingsBase.

Ваша библиотека классов может затем создать копию этой реализации SettingsBase и управлять своими собственными настройками, не мешая настройкам, которые могут потребоваться в других местах.

http://msdn.microsoft.com/en-us/library/system.configuration.settingsbase.aspx

Класс настроек будет выглядеть примерно так:

sealed class MySettings : SettingsBase
{
    [ApplicationScopedSetting()]
    [DefaultSettingValue("Default")]
    public string MySetting
    {
        get { return this["MySetting"].ToString(); }
        set { this["MySetting"] = value; }
    }
}
1 голос
/ 19 мая 2011

Я считаю, что отдельный домен приложения может использовать другой файл конфигурации.Я не уверен, как еще ты мог это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...