我一直注意到静态类在用于存储全局信息方面在 SO 上有很多不好的代表。(而且全局变量一般都被轻视)我只想知道下面我的例子有什么好的选择......
我正在开发一个 WPF 应用程序,从我的数据库中检索到的数据的许多视图都是根据当前登录用户的 ID 进行过滤的。同样,我的应用程序中的某些点应该仅供被视为“管理员”的用户访问。
我目前在静态类中存储了一个loggedInUserId和一个isAdmin bool。
我的应用程序的各个部分都需要此信息,我想知道为什么在这种情况下它并不理想,以及替代方案是什么。启动和运行似乎非常方便。
我唯一能想到的替代方法是使用 IoC 容器将 Singleton 实例注入需要此全局信息的类中,然后这些类可以通过其接口与之对话。但是,这是否矫枉过正/导致我陷入分析瘫痪?
提前感谢您的任何见解。
更新
所以我倾向于通过 IoC 进行依赖注入,因为它可以更好地提高可测试性,因为如果需要,我可以交换一个提供“全局”信息的服务和一个模拟。我想剩下的就是注入的对象应该是单例还是静态的。:-)
会选择马克的答案,虽然在等着看是否有更多的讨论。我不认为有这样的正确方法。我只是有兴趣看到一些可以启发我的讨论,因为在一些类似问题上似乎有很多“这很糟糕”“那很糟糕”的陈述,而没有任何建设性的替代方案。
更新#2 所以我选择了罗伯特的答案,因为它是一个很好的替代方案(我认为替代方案是一个奇怪的词,可能是框架中内置的 One True Way)。它不会强迫我创建一个静态类/单例(尽管它是线程静态的)。
唯一让我感到好奇的是,如果我必须存储的“全局”数据与用户身份验证无关,这将如何解决。