Я недавно вспыхнул часть своего приложения winform в .dll. Некоторые классы, в которых dll хочет пользовательские настройки выборки/хранилища. Классы просто использовали сгенерированный файл Настроек VS, таким образом, он просто сделал Properties.Settings.Default.SomeSetting = var;Properties.Settings.Default.Save()
и т.д.
Каковы мои опции теперь, когда я выгнал тот код с квартиры к классу library/.dll?
Хостинговое приложение должно обрабатывать интерфейс файла конфигурации, а не DLL. Либо
Передайте любые настройки, которые необходимо прочитать / изменить в DLL в качестве параметров, либо
Передайте набор значений параметров, которые могут быть изменены DLL, и сохраните любые изменения, сделанные DLL, в коллекция, когда управление возвращается вызывающему приложению.
В принципе это похоже на удаление интерфейса базы данных с бизнес-уровня многоуровневого приложения и его инкапсуляцию в уровень данных.
Я бы не рекомендовал это (лучше используйте свой собственный класс для настроек), но вы можете попробовать следующее:
string sectionName = "applicationSettings/" +
appName + ".Properties.Settings";
System.Configuration.ClientSettingsSection section =
(System.Configuration.ClientSettingsSection)
System.Configuration.ConfigurationManager.GetSection(sectionName);
foreach (SettingElement setting in section.Settings)
{
string value = setting.Value.ValueXml.InnerText;
string name = setting.Name;
if (name.ToLower().StartsWith(searchName.ToLower()))
{
return value;
}
}
Для меня не имеет большого смысла иметь DLL, хранящую пользовательские настройки. DLL - это библиотека, а не приложение, и она напрямую не взаимодействует с пользователем. Если классам в DLL требуется доступ к пользовательским настройкам, вы можете передать их в качестве параметров.
Класс Properties является автогенерируемым. Это действительно обертка для конфигурационного файла. Если вы не хотите менять свой дизайн, просто зайдите в код и скопируйте его в свою DLL. Но помните, что он больше не будет магически поддерживаться (регенерироваться). Или вы можете использовать ConfigurationManager, чтобы получить доступ к файлу конфигурации напрямую.