【问题标题】:An alternative to global variables in Asp.Net Core?Asp.Net Core 中全局变量的替代方案?
【发布时间】:2018-01-07 21:14:53
【问题描述】:

在 ASP.Net Core 1.1 Web API 中,我需要存储一些必须可跨所有控制器访问的全局信息。因此,当客户端调用 API 上的某个端点时,必须设置某个变量(字典),该变量将从所有其他控制器中读取。从我所见,使用全局静态变量显然是个坏主意?也许有人可以告诉我为什么,什么是更好的选择?我听说过使用配置文件或缓存...

【问题讨论】:

  • 我编辑了您的标题,使问题不那么主观,并删除了“有什么建议吗?”在问题正文的末尾,因为 stackoverflow 不是推荐网站,并且要求推荐通常会导致问题被关闭且无法回答。

标签: caching configuration asp.net-core-mvc asp.net-core-webapi asp.net-core-1.1


【解决方案1】:

许多开发人员不喜欢使用全局变量的一个主要原因是,它们会使对使用它们的类进行完全单元测试变得困难(或不可能)。对其代码进行单元测试的开发人员往往更喜欢依赖注入而不是全局变量。

如果通过类的构造函数参数将所需的变量“注入到类中”,那么单元测试可以传入这些变量的已知值,从而使测试的预期结果可预测。这极大地帮助了单元测试。您可以从official documentation 了解更多关于 ASP.NET Core 依赖注入的信息。

全局变量的另一个问题是它们可以从任何地方更改。因此,在调试时,有时很难追踪哪段代码改变了它们。通过使用依赖注入而不是全局变量,开发人员可以知道可以访问该变量的特定类。

【讨论】:

  • 是的,这绝对是 DI 最好的解决方案,基于 AddSingleton 的 InMemory 实现或基于 IDistributedCache 的分布式(这可能是一个更好的选择,因为在现代网络世界中,你经常有多台服务器)。
猜你喜欢
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-13
  • 1970-01-01
  • 2023-03-30
  • 2017-02-03
相关资源
最近更新 更多