gpt4 book ai didi

c# - 无效操作异常 : Cannot consume scoped service 'Microsoft.JSInterop.IJSRuntime' from singleton '...IAuthentication' in Blazor

转载 作者:行者123 更新时间:2023-12-04 00:21:07 26 4
gpt4 key购买 nike

我正在创建 Blazor 项目,起初一切正常,直到我需要注入(inject) IJSRuntime进入 cs文件。

Microsoft.JSInterop;
...
...

public BaseService(IJSRuntime jSRuntime)
{
}
BaseService在另一个名为 AuthenticationServices 的服务中继承这也使用了一个名为 IAuthentication 的接口(interface).因此
using Microsoft.JSInterop;

public class AuthenticationServices : BaseService, IAuthentication
{
public AuthenticationServices(IJSRuntime jSRuntime) : base(jSRuntime)
{
}
}

我的问题在 Startup.cs具有此代码的文件
services.AddSingleton<IAuthentication, AuthenticationServices>();

如果我运行它说的应用程序,
InvalidOperationException: Cannot consume scoped service 'Microsoft.JSInterop.IJSRuntime' from singleton '...IAuthentication'

这是什么意思?我是否正确地只需要添加一些东西?

最佳答案

Blazor 中的依赖注入(inject)有 3 种不同的生命周期策略。

  • 单例
  • 范围
  • transient

  • 辛格尔顿
    这意味着该类型的任何服务都将只有一个实例。
    范围
    此生命周期意味着对于创建的对象集 scope在该范围内将只是一个实例。通常在大多数情况下,创建范围是为了处理用户 session (客户端 Blazor)或用户连接(服务器端 Blazor)。您可以与每个 HTTP 请求 (ASP.NET) 的范围进行比较。
    短暂的
    每次请求时都会创建具有此生命周期的对象。与普通 new 相同.
    终身消费规则
    鉴于这些对象生命周期策略的性质,适用以下使用服务的规则。
  • Transient服务可以消费 Transient, 范围 and单例服务。
  • Scoped服务可以消费 ScopedSingleton服务。但不能消费Transient服务。
  • Singleton服务只能使用 Singleton服务。但不能消费TransientScoped服务。

  • 服务 IJSRuntime在 Blazor 中注册为 Scoped服务,因此只能由 Scoped 使用和 Transient服务。
    所以你要么必须制作 AuthenticationServices Scoped服务,或摆脱 IJSRuntime作为构造函数参数。

    关于c# - 无效操作异常 : Cannot consume scoped service 'Microsoft.JSInterop.IJSRuntime' from singleton '...IAuthentication' in Blazor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60574103/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com