У меня есть приложение winforms, в котором некоторые данные хранятся в XML-файлах. Местоположение, где эти XML-файлы должны быть сохранены, может быть настроено пользователем и хранится в AppSettings. Все мои слои являются отдельными блоками. Действительно ли я могу получить доступ к своим настройкам от моего блока DAL, или я должен передать это как аргумент через все мои слои?
Когда я пытаюсь считать настройки из своего уровня DAL, я встречаюсь с другой проблемой
Configuration config = ConfigurationManager.OpenExeConfiguration(
System.Reflection.Assembly.GetEntryAssembly().Location);
string dataStorageLocation = config.AppSettings["DataStorageLocation"];
конфигурация. AppSettings["DataStorageLocation"] дает ошибку компиляции: Система. Конфигурация. ConfigurationElement.this [Система. Конфигурация. ConfigurationProperty] недоступен из-за его уровня защиты. Почему это?
Кто-то может поместить меня на правильном пути?Спасибо.
Вам необходимо использовать config.AppSettings.Settings["DataStorageLocation"]
.
Смотрите документация MSDN для примера.
Альтернативно, и IMHO лучше, вы можете использовать System.ConfigurationManager.AppSettings[name]
для доступа к AppSettings приложения хоста. Это, вероятно, более гибкое решение, чем ваша техника, так как оно также будет работать, если ваша DAL сборка, например, размещена на уровне служб в IIS. Доступ к конфигурационной информации из конфигурационного файла хост-приложения напрямую таким образом вполне приемлем, и в целом лучше, чем передача конфигурационной информации через уровни.
Настройки AppSettings доступны для любой сборки, загруженной вызывающим процессом, поэтому у вас не будет проблем с доступом к ним при загрузке любой сборки.