我有一个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>();