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