Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Blazor服务器的后端正确使用依赖项注入?_C#_Asp.net Core_Dependency Injection_Blazor_Blazor Server Side - Fatal编程技术网

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

C# 如何在Blazor服务器的后端正确使用依赖项注入?,c#,asp.net-core,dependency-injection,blazor,blazor-server-side,C#,Asp.net Core,Dependency Injection,Blazor,Blazor Server Side,我有一个Blazor服务,它需要一个特定的“本地存储”——注入服务。是这样做的: public class UserApi : IUserApi { private readonly LocalStorage _localStorage; public UserApi(LocalStorage localStorage) { _localStorage = localStorage; } ...

我有一个Blazor服务,它需要一个特定的“本地存储”——注入服务。是这样做的:

 public class UserApi : IUserApi
    {
        private readonly LocalStorage _localStorage;

        public UserApi(LocalStorage localStorage)
        {
            _localStorage = localStorage;
        }
...
}
“LocalStorage”被注入Startup.cs(
ConfigureServices
):

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

我还使用以下行添加了我自己的服务:

services.AddSingleton<IUserApi, UserApi>();
并访问其中的功能:

  private void HandleValidSubmit()
    {
        if (UserApi.Login( _loginUser.Mail, _loginUser.Password, out string error, out Guid? guid))
        {
            // DoMagic
        }
    }
当我尝试启动应用程序时,收到以下错误:

System.AggregateException

内部异常1:

InvalidOperationException:验证服务时出错 描述符的服务类型:BlazorFood.IUserApi生存期:Singleton ImplementationType:BlazorFood.UserApi':无法使用作用域服务 “Cloudcrate.AspNetCore.Blazor.Browser.Storage.LocalStorage”来自 辛格尔顿“BlazorFood.IUserApi”

内部异常2:InvalidOperationException:无法使用作用域 服务'Cloudcrate.AspNetCore.Blazor.Browser.Storage.LocalStorage' 来自singleton'BlazorFood.IUserApi'

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

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


要正确注入我的服务,必须做些什么?

错误消息的这一部分

无法使用单例“BlazorFood.IUserApi”中的作用域服务“Cloudcrate.AspNetCore.Blazor.Browser.Storage.LocalStorage”

如文件所示

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

参考文献

注册服务时不要将其设置为单例,这样可以解决问题

services.AddScoped<IUserApi, UserApi>();
services.addScope();
  private void HandleValidSubmit()
    {
        if (UserApi.Login( _loginUser.Mail, _loginUser.Password, out string error, out Guid? guid))
        {
            // DoMagic
        }
    }
services.AddScoped<IUserApi, UserApi>();