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





В любом классе вы можете использовать ConfigurationManager.AppSettings["KeyToSetting"] для доступа к любому значению в элементе web.config (или app.config)
Конечно, это возможно, но следует иметь в виду, что правильно спроектированный класс (если он явно не разработан для ASP.NET) не должен знать или заботиться о том, откуда берется информация. Должно быть свойство (или метод, но свойства - это более «.NET-способ» делать что-то), которое вы устанавливаете с помощью строкового значения из самого приложения, а не позволяете классу напрямую получать информацию из web.config.
Хороший ответ! Жаль, что я еще не использовал сегодняшние голоса. Свойства - определенно способ сделать это правильно.
Согласовано. Код подключения / управления приложения может свободно обращаться к файлу конфигурации, но бизнес-классы не должны. Отсутствие ключей конфигурации - это ошибка времени выполнения, поэтому, если разработчик использует класс, который ожидает, что файл конфигурации будет там во втором проекте, он может не увидеть ошибку, пока она не будет запущена в производство.
Если у вас есть значения конфигурации, которые используются во многих местах, рассмотрите возможность разработки класса 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;
}
}
}
Это работает, но не всегда удачный дизайн. См. Ответ Харпера Шелби и его комментарии.