我有一个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
}
}
当我尝试启动我的应用程序时,出现以下错误:
System.AggregateException
内部例外1:
InvalidOperationException:验证服务时出错描述符'ServiceType:BlazorFood.IUserApi寿命:SingletonImplementationType:BlazorFood.UserApi':无法使用作用域服务来自的“ Cloudcrate.AspNetCore.Blazor.Browser.Storage.LocalStorage”单例“ BlazorFood.IUserApi”。
内部异常2:InvalidOperationException:无法使用作用域服务'Cloudcrate.AspNetCore.Blazor.Browser.Storage.LocalStorage'来自单例“ BlazorFood.IUserApi”
当我从ConfigureServices
中删除AddSingleton-line时,我可以启动我的应用程序,但尝试访问包含IUserApi-Injection的剃刀页面时检索到错误:
InvalidOperationException:无法提供属性值类型为“ BlazorFood.Pages.admin.Login”的“ UserApi”。没有类型为“ BlazorFood.IUserApi”的注册服务]
要正确注入我的服务需要做什么?
错误消息的此部分
无法使用单例'BlazorFood.IUserApi'的作用域服务'Cloudcrate.AspNetCore.Blazor.Browser.Storage.LocalStorage'
也表示为frp,文档
从单例中解析作用域服务很危险。处理后续请求时,可能会导致服务的状态不正确。
参考Dependency injection in ASP.NET Core
不要让您的服务单例,应该解决该问题
services.AddScoped<IUserApi, UserApi>();