Как я должен сохранить свои настройки сайта MVC ASP.NET?

У меня есть сайт MVC ASP.NET, который состоит из 3 проектов в решении:

DomainModel (библиотека классов - содержит LINQ Repo),
DomainServices (библиотека классов - содержит бизнес-логику),
WebUI (ASP.NET сайт MVC)

Мне нужно место для хранения набора настроек для нашего сайта, который может быть настроен через XML.

В какой проект это должно войти? У кого-либо есть пример того, как они загружают и затем получают доступ к своим настройкам через эти различные проекты?

Я загружаю XML-файл однажды в конструкторе некоторого класса C#, который содержит свойства для всех моих настроек?

Кто-то может дать мне некоторые примеры и подсказки относительно хранения настроек в XML-файле для использования в многопроектном решении?

5
задан Rinndar 6 January 2010 в 17:01
поделиться

5 ответов

Настройки обычно хранятся в web.config. Все сборки имеют доступ к этим настройкам.

ConfigurationManager.AppSettings["key"]

Нужно добавить ссылку на System.configuration.dll

.
8
ответ дан 18 December 2019 в 09:07
поделиться

Я бы хранил его в новом сервисе с интерфейсом.

У меня есть класс, у которого есть все свойства/настройки. Он также будет управлять XML файлом.

Инверсия контейнера управления позволит вам внедрять их с помощью инъекции зависимостей в другие классы.

.
1
ответ дан 18 December 2019 в 09:07
поделиться

Я согласен с Матиасом использовать способ по умолчанию, предложенный структурой. Тем не менее, вы можете (должны, IMHO) сделать некий класс-обёртку, возможно, за интерфейсом для облегчения насмешек в юнит-тестах, например:

class MyAppSettings
{
    public int SomeSetting 
    { 
       get 
       {
         return Convert.ToInt32(ConfigurationManager.AppSettings["SomeSetting"]); 
       } 
    }
}
2
ответ дан 18 December 2019 в 09:07
поделиться

Define a Shared property in your class library to hold the app settings (экземпляр Specialized.NameValueCollection). Затем в логике вашего сайта, установите это новое свойство в ваши ASP.NET настройки из web.config в подкаталоге Application_Start из global.asax.

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
    ' Code that runs on application startup
    DomainModel.Common.AppSettings = ConfigurationManager.AppSettings
End Sub

Таким образом, вы можете попасть в настройки из проектов библиотек классов.

0
ответ дан 18 December 2019 в 09:07
поделиться

Вместо того, чтобы использовать AppSettings, который является всего лишь набором пар ключевых значений, рассмотрите возможность определения собственной структуры конфигурации с помощью ConfigurationSection или IConfigurationSectionHandler

Таким образом, вы получите всю безопасность класса-обертки, и это не загромождает ваши AppSettings (и хорошо определено где-нибудь для использования).

Еще лучше, определите вашу собственную XML схему, и используйте XmlSerialization/Deserialization для хранения этого файла вне web.config, прослушивая изменения в нем (привяжите его к кэшу, что угодно).

Если вы делаете это таким образом, вам не нужно изменять web.config для получения изменений и, следовательно, не нужно перезапускать ваше веб-приложение, теряющее сеанс/кэш в процессе работы.

Не настолько хорошо написанные веб-приложения без гражданства должны заботиться о потере сеанса/кэша - но всегда есть кто-то... :)

.
7
ответ дан 18 December 2019 в 09:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: