[英]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” 。
第一个页面加载没问题,但之后,它会引发此错误。 这也会发生在布局页面中嵌套的任何组件上,但似乎不会发生在页面本身上。
我通过这样做解决了这个问题。
services.AddDbContext<ApplicationDbContext>(options =>
options.UseNpgsql(
Configuration.GetConnectionString("DefaultConnection")), ServiceLifetime.Transient);
@inherits OwningComponentBase<ApplicationDbContext>
代替
@inject ApplicationDbContext context
我希望这可以帮助某人。 讨论此问题的票证是AspNetCore存储库中的#10448 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.