繁体   English   中英

将服务注入到服务器端 Blazor 中的 MainLayout.cs

[英]Injecting services in to the MainLayout.cs in Server-side Blazor

正如标题所暗示的,我正在尝试将服务注入 Blazor 服务器端的MainLayout页面。 该服务是一个像这样注入的 ApplicationDbContext:

@inject ApplicationDbContext context

并像这样注册:

services.AddDbContext<ApplicationDbContext>(options =>
    options.UseNpgsql(
        Configuration.GetConnectionString("DefaultConnection")), ServiceLifetime.Transient);

但是,我收到System.ObjectDisposedException异常。

System.ObjectDisposedException: '无法访问已处理的对象。 此错误的一个常见原因是处理从依赖注入解析的上下文,然后尝试在应用程序的其他地方使用相同的上下文实例。 如果您在上下文上调用 Dispose() 或将上下文包装在 using 语句中,则可能会发生这种情况。 如果你使用依赖注入,你应该让依赖注入容器来处理上下文实例。 对象名称: “ApplicationDbContext”

第一个页面加载没问题,但之后,它会引发此错误。 这也会发生在布局页面中嵌套的任何组件上,但似乎不会发生在页面本身上。

我通过这样做解决了这个问题。

  1. 注册了 DbContext
services.AddDbContext<ApplicationDbContext>(options =>
    options.UseNpgsql(
        Configuration.GetConnectionString("DefaultConnection")), ServiceLifetime.Transient);
  1. 像这样将 DbContext 注入到嵌套的 razor 组件中
@inherits OwningComponentBase<ApplicationDbContext>

代替

@inject ApplicationDbContext context
  1. 执行数据库操作,它神奇地工作。

我希望这可以帮助某人。 讨论此问题的票证是AspNetCore存储库中的#10448

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM