Я заметил, что статические классы получают много плохих повторений на SO в связи с тем, что они используются для хранения глобальной информации. (И вообще, над глобальными переменными пренебрегают) Я просто хотел бы знать, что является хорошей альтернативой для моего примера ниже ...
Я разрабатываю приложение WPF, и многие представления данных, извлеченных из моей базы данных, фильтруются на основе идентификатора текущего вошедшего в систему пользователя. Аналогичным образом, определенные пункты в моем приложении должны быть доступны только пользователям, которые считаются «администраторами».
В настоящее время я храню loggedInUserId и isAdmin bool в статическом классе.
Различные части моего приложения нуждаются в этой информации, и мне интересно, почему это не идеально в этом случае, и каковы альтернативы. Кажется, очень удобно начать работать.
Единственная вещь, о которой я могу подумать как об альтернативе, - это использовать IoC-контейнер для внедрения экземпляра Singleton в классы, которым нужна эта глобальная информация, и классы могли бы об этом говорить через свой интерфейс. Тем не менее, это перебор / приводит меня к анализу паралич?
Заранее благодарим за понимание.
Обновление
Так что я склоняюсь к внедрению зависимостей через IoC, так как это лучше поддается тестируемости, так как я мог бы поменяться в сервисе, который предоставляет "глобальную" информацию с макетом, если это необходимо. Я полагаю, что остается то, должен ли вводимый объект быть одноэлементным или статическим. : -)
Вероятно, выберет ответ Марка, ожидая, если будет еще обсуждение. Я не думаю, что есть правильный путь как таковой. Мне просто интересно посмотреть на обсуждение, которое бы меня просветило, так как кажется, что по некоторым схожим вопросам много «это плохо», «плохо», без каких-либо конструктивных альтернатив.
Обновление № 2
Поэтому я выбрал ответ Роберта, видя, что это отличная альтернатива (я полагаю, альтернатива - это странное слово, вероятно, Единый истинный путь, видящий, как он встроен в структуру). Это не заставляет меня создавать статический класс / синглтон (хотя это статический поток).
Единственное, что по-прежнему вызывает у меня любопытство, - как бы это было решено, если бы "глобальные" данные, которые я должен был хранить, не имели никакого отношения к аутентификации пользователя.