在 Startup 中初始化 Singleton 变量并在 wole app 中使用它

Posted

技术标签:

【中文标题】在 Startup 中初始化 Singleton 变量并在 wole app 中使用它【英文标题】:Initialize Singleton variable in Startup and use it in wole app 【发布时间】:2021-07-01 07:53:08 【问题描述】:

我想将数据存储在一个对象中,并且我想在整个应用程序中使用它。我在 Program.cs

中创建了一个对象并注册为 Singleton

对象:

 private Dictionary<string, string> _currentValues;

 public Dictionary<string, string> currentValues
 
      get => _currentValues;
      set
      
           _currentValues = value;
           StateHasChanged();
      

单身注册:

 services.AddSingleton<LocalizeData>();

在注册后的program.cs中我添加了初始数据。

var _localizeData = host.Services.GetRequiredService<LocalizeData>();
_localizeData.currentValues = locaData;

现在我想在整个应用程序中使用这些数据。我注入了它的主页。

@LocalizeData localizeData

如果我现在使用localizeData.currentValues,对象是null

缺少什么。如何初始化Starttup 中的对象以及如何在整个应用程序中使用数据?

【问题讨论】:

【参考方案1】:

你快到了。 :D

要在您的组件中使用服务,您需要使用inject 关键字:

@inject LocalizeData localizeData

【讨论】:

我在组件中也这样做了。但不幸的是,每次对象都会以每次注入新的方式启动,并且对象为空。我想如果我注册一个单例变量并初始化对象,我可以在整个应用程序中使用这些数据。不是吗?我需要的是一个在启动时初始化的“globale”对象。单身人士不是正确的方式吗? 您运行的是 WASM 还是服务器?如果您正在运行 WASM,那么每次加载应用程序时都会初始化该服务,这可能就是您正在做的事情。另外你从哪里得到LocaData?您通常在初始化方法中初始化服务中的数据。【参考方案2】:

问题是我用的

await builder.Build().RunAsync();

而不是

await host.RunAsync();

这就是我创建第二个实例但无法访问初始化数据的原因。

查看文档: https://docs.microsoft.com/en-us/aspnet/core/blazor/fundamentals/dependency-injection?view=aspnetcore-5.0&pivots=webassembly

【讨论】:

以上是关于在 Startup 中初始化 Singleton 变量并在 wole app 中使用它的主要内容,如果未能解决你的问题,请参考以下文章

解决Spring中singleton的Bean依赖于prototype的Bean的问题

如何在TypeScript中定义Singleton

在 Startup.cs 中初始化 Blob 存储

JS设计模式---单例(Singleton)模式

Keil C中startup.a51的作用

Keil C中startup.a51的作用转