Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 跨ASP.NET核心控制器共享变量和首次初始化_C#_Asp.net_Asp.net Core - Fatal编程技术网

C# 跨ASP.NET核心控制器共享变量和首次初始化

C# 跨ASP.NET核心控制器共享变量和首次初始化,c#,asp.net,asp.net-core,C#,Asp.net,Asp.net Core,我有一组变量,可以从各种控制器访问。因为加载它们是一个相当长的操作,所以我只希望在应用程序启动时加载一次,然后能够通过各种控制器设置访问它们 现在我最好的解决方案是使用一个静态对象,通过调用“Initialize”方法初始化并保存所有变量,但它感觉很不正常 有什么更好的解决方案可以达到同样的效果呢?您可以创建实例类,将所有属性放入其中,并将其注册为DI容器中的单例。您将收到构造函数中每个控制器的实例。 在Startup.cs ConfigureServices方法中: services.AddS

我有一组变量,可以从各种控制器访问。因为加载它们是一个相当长的操作,所以我只希望在应用程序启动时加载一次,然后能够通过各种控制器设置访问它们

现在我最好的解决方案是使用一个静态对象,通过调用“Initialize”方法初始化并保存所有变量,但它感觉很不正常


有什么更好的解决方案可以达到同样的效果呢?

您可以创建实例类,将所有属性放入其中,并将其注册为DI容器中的单例。您将收到构造函数中每个控制器的实例。 在Startup.cs ConfigureServices方法中:

services.AddSingleton<YourPropertiesClass()>;
services.AddSingleton;
另一个选项是使用InMemoryCache:
但对于您的情况,我认为这是过度复杂。

它可以保持为静态类吗?我会选择这样做,而不是在容器中将类型注册为单例,因为意图不够明确,它必须是单例实例才能正常工作,而对于静态类和静态属性,您的意图是明确的。它可能仍然是一个静态类。看看singleton的实现,我认为对于其他人来说,静态类的意图可能更清楚。