在 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 中使用它的主要内容,如果未能解决你的问题,请参考以下文章