Перебор всех статичных свойств статичного класса и изменение их значений
В статичном классе SiteConfig
реализован метод сохранения настроек в БД. Сами настройки представляют собой поля. Например,
/// <summary>
/// Базовые настройки сайта
/// </summary>
public static GeneralConfig General { get; private set; }
где каждый класс (в примере это GeneralConfig
) реализует интерфейс ISiteConfig
, в котором есть методы сохранения и загрузки данных с БД. Сам метод реализован так:
/// <summary>
/// Сохраняю все настройки в БД
/// </summary>
/// <param name="configService">Сервис для работы с конфигурациями</param>
/// <param name="reLoadAfterSave">Нужно ли перезагружать данные после сохранения</param>
public static void SaveAll (ConfigService configService, bool reLoadAfterSave = true)
{
foreach (FieldInfo field in typeof(SiteConfig).GetFields(BindingFlags.Public | BindingFlags.Static |
BindingFlags.FlattenHierarchy))
{
// получаем значение поля
object? fieldValue = field.GetValue(null);
// если значением поля является класс, реализующий интерфейс ISiteConfig
if (fieldValue is ISiteConfig scValue)
{
// - то сохраняем его значения в БД
scValue.SaveToDataBase(configService);
//- если нужно перезагружать значения
if (reLoadAfterSave)
// -- то перезагружаем
scValue.LoadFormDataBase(configService);
}
field.SetValue(null, fieldValue);
}
}
Вопрос: где может быть ошибка или почему не работает?
Источник: Stack Overflow на русском