1

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

+0

我已经编辑过你的标题,让这个问题少一些主观并删除了“任何建议?”在问题主体的末尾,由于stackoverflow不是一个建议网站,而且要求提供建议往往会导致问题被封闭和无法回答。 –

回答

2

许多开发人员不喜欢使用全局变量的一个主要原因是,他们可以很难(或不可能)完全单元测试一个使用全局变量的类他们。开发人员测试他们的代码倾向于倾向于依赖注入而不是全局变量。

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

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

+0

是的,这绝对是DI最好的解决方案,无论是基于AddSingleton的InMemory实现还是基于IDistributedCache的分布式(由于在现代网络世界中,您通常拥有多台服务器,这可能是一个更好的选择)。 –