如何在Blazor服务器的后端正确使用依赖注入



我有一个Blazor服务,它需要注入一个特定的"LocalStorage"服务。它是这样做的:

public class UserApi : IUserApi
{
private readonly LocalStorage _localStorage;
public UserApi(LocalStorage localStorage)
{
_localStorage = localStorage;
}
...
}

"LocalStorage"被注入Startup.cs(ConfigureServices(:

services.AddStorage();

(我认为可以安全地假设这是应该的(

我还添加了我自己的服务,行如下:

services.AddSingleton<IUserApi, UserApi>();

在剃须刀页面上,我注入了我的服务:

@inject IUserApi UserApi

并在那里访问一个功能:

private void HandleValidSubmit()
{
if (UserApi.Login( _loginUser.Mail, _loginUser.Password, out string error, out Guid? guid))
{
// DoMagic
}
}

当我尝试启动我的应用程序时,我收到以下错误:

系统。聚合异常

内部异常1:

InvalidOperationException:验证服务时出错描述符"服务类型:BlazorFood"。IUserApi寿命:Singleton实施类型:BlazorFood。UserApi':无法使用作用域服务"Cloudcrate。AspNetCore。Blazor。浏览器存储LocalStorage"来自singleton‘BlazorFood。IUserApi’。

内部异常2:InvalidOperationException:无法使用作用域服务的Cloudcrate。AspNetCore。Blazor。浏览器存储LocalStorage来自单身人士BlazorFood。IUserApi’

当我从ConfigureServices中删除AddSingleton行时,我可以启动我的应用程序,但在尝试访问包含IUserApi Injection:的剃刀页面时检索到错误

InvalidOperationException:无法为属性提供值类型"BlazorFood"上的"UserApi"。Pages.admin.Login'。没有BlazorFood类型的注册服务。IUserApi’

必须做些什么才能正确注入我的服务?

这部分错误消息

无法使用作用域服务的Cloudcrate。AspNetCore。Blazor。浏览器存储LocalStorage"来自singleton"BlazorFood。IUserApi’

如文件所示

从单例解析作用域服务是危险的。在处理后续请求时,这可能会导致服务的状态不正确。

ASP中的引用依赖项注入。NET核心

注册时不要让你的服务成为单例服务,这应该可以解决问题

services.AddScoped<IUserApi, UserApi>();

相关内容

  • 没有找到相关文章

最新更新