Как мне сохранить настройки моего сайта ASP.NET MVC? - PullRequest
5 голосов
/ 06 января 2010

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

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

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

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

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

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

Ответы [ 5 ]

8 голосов
/ 06 января 2010

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

ConfigurationManager.AppSettings["key"]

Вам необходимо добавить ссылку на System.configuration.dll

7 голосов
/ 09 февраля 2010

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

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

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

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

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

2 голосов
/ 06 января 2010

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

class MyAppSettings
{
    public int SomeSetting 
    { 
       get 
       {
         return Convert.ToInt32(ConfigurationManager.AppSettings["SomeSetting"]); 
       } 
    }
}
1 голос
/ 06 января 2010

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

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

Контейнер Inversion of Control позволит вам внедрить их, используя внедрение зависимостей в другие ваши классы.

0 голосов
/ 06 января 2010

Определите свойство Shared в вашей библиотеке классов для хранения настроек приложения (экземпляр 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

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

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