Альтернативы файлам web.config в ASP.NET - PullRequest
4 голосов
/ 06 июня 2010

По моему опыту, файлы web.config широко осуждаются.В частности, я обнаружил, что ими трудно управлять, когда у вас есть несколько поддерживаемых сред, и их сложно обновлять из-за отсутствия проверки во время обновления и многословия XML.

Какие есть альтернативы?

Ответы [ 3 ]

5 голосов
/ 17 октября 2012

Лично я не против Web.Config для небольших одноразовых приложений, но для чего-либо существенного я избегаю использовать их для конфигурации приложений.

Вот что я делаю ...

  • Я определяю один или несколько интерфейсов для моей конфигурации в зависимости от сложности.
  • Я создаю различные реализации для каждой среды (dev, stage, prod и т. Д.)
  • Я использую абстрактный базовый класс для определения общей конфигурации.
  • Затем я использую Ninject для внедрения зависимостей, чтобы обеспечить соответствующую реализацию в зависимости от среды, на которую я нацеливаюсь.
  • Я всегда кодирую интерфейсы конфигурации и извлекаю пользу из проверок времени компиляции.

Вот пример ...

// Config Contract
public interface IWebAppConfig
{
     string SmtpHost { get; }
     string RootUrl { get; }
}

// Define Common Config Values (values that don't change per environment) 
public abstract class AbstractWebAppConfig : IWebAppConfig
{
     public string SmtpHost { get { return "smtp.google.com"; } }
     public abstract RootUrl { get; }
}

// Dev Config Settings
public class DevWebAppConfig : AbstractWebAppConfig
{
     public override string RootUrl { get { return "http://localhost:1322"; } }
}

// Stage Config Settings
public class StageWebAppConfig : AbstractWebAppConfig
{
     public override string RootUrl { get { return "http://stage.mysite.com"; } }
}

// Prod Config Settings
public class ProdWebAppConfig : AbstractWebAppConfig
{
     public override string RootUrl { get { return "http://www.mysite.com"; } }
}

Преимущества этого подхода:

  • Тип Сейф
  • Конфигурация представлена ​​в виде объектов, а не пар ключ-значение (полезно для передачи логических групп значений конфигурации вместо нескольких значений)
  • Легче для модульного тестирования классов, которые зависят от значений конфигурации
  • Совместное использование конфигурации несколькими приложениями тривиально
  • Развертывание сборки, содержащей реализации конфигурации, вызовет повторное использование пула приложений, почти как повторное развертывание web.config.

Вы по-прежнему можете использовать web.config для определения среды, что я обычно делаю, добавляя в appSettings следующее:

<appSettings>
     <!-- accepts: dev|stage|prod -->
     <add key="Env" value="dev" />
</appSettings>

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

4 голосов
/ 06 июня 2010

Как долго ASP.NET существует; сколько производственных сайтов используют его?

Они почти все используют web.config, как оказалось, из коробки. Они не могут слишком "оскорблять" это.

Тем не менее, посмотрите на новые функции ASP.NET в .NET 4.0, включая файлы web.config для конкретной конфигурации и преобразования web.config на основе xml, которые позволяют генерировать версии web.config для конкретной среды. во время развертывания.

Вы можете поносить это немного меньше.

0 голосов
/ 06 июня 2010

Я категорически не согласен с вашим утверждением о том, что файлы web.config "широко осуждаются". По моему опыту, они просты в обслуживании и управлении, а в некоторых случаях это единственное место, где вы можете поместить данные конфигурации.

Стоит отметить, что VS2010 поддерживает конфигурацию каждой сборки web.config. У меня есть web.config, web.debug.config и web.release.config. Файлы отладки и выпуска переопределяют строки подключения, указанные в web.config, и заменяют их правильными строками, в частности для моих отладочных и производственных SQL-серверов. Я также использую это для настройки некоторых значений AppSettings.

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

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

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