Можно ли передать настройку приложения в web.config классу Common C#

Можно ли передать "строку" параметра приложения в web.config классу Common C#?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
881
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

В любом классе вы можете использовать ConfigurationManager.AppSettings["KeyToSetting"] для доступа к любому значению в элементе web.config (или app.config)

Это работает, но не всегда удачный дизайн. См. Ответ Харпера Шелби и его комментарии.

Raelshark 18.10.2008 00:26
Ответ принят как подходящий

Конечно, это возможно, но следует иметь в виду, что правильно спроектированный класс (если он явно не разработан для ASP.NET) не должен знать или заботиться о том, откуда берется информация. Должно быть свойство (или метод, но свойства - это более «.NET-способ» делать что-то), которое вы устанавливаете с помощью строкового значения из самого приложения, а не позволяете классу напрямую получать информацию из web.config.

Хороший ответ! Жаль, что я еще не использовал сегодняшние голоса. Свойства - определенно способ сделать это правильно.

DOK 18.10.2008 00:01

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

Daniel Auger 18.10.2008 00:16

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

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

public static class ApplicationConfiguration
{
    private static DateTime myEpoch;
    public static DateTime Epoch
    {
       get
       {
          if (myEpoch == null)
          {
              string startEpoch = ConfigurationManager.AppSettings["Epoch"];
              if (string.IsNullOrEmpty(startEpoch))
              {
                 myEpoch = new DateTime(1970,1,1);
              }
              else
              {
                 myEpoch = DateTime.Parse(startEpoch);
              }
          }
          return myEpoch;   
       }
    }
}

Другие вопросы по теме