Blazor,对象生存时间和依赖注入

问题描述

我正在做我的第一个Blazor项目,并且面临对象生命周期的问题。

确切的问题是我的EF DbContext从未被处置过,因此在第一次数据库更新后,任何后续更新都会失败,因为有一个异常告诉我该上下文已经跟踪了该实体。

因此,经过调查,我发现所有依赖注入服务都在应用启动后就解决了,并且从未得到处置,DbContext也作为UnitOfWork注入了

在MVC中,每次调用结束时都会处理端点对象,因此DbContext被处理,并且永远不会发生此问题。

但是在Blazor中,对象的生存时间有所不同。作为一项好习惯,我应该在需要时手动解决DbContext还是遗漏了某些东西?

编辑: 我还应该添加我的DbContext作为IServiceCollection添加Scoped

解决方法

Blazor没有服务器拥有的便捷的请求范围。

您应该自己管理上下文,不能(完全)将其留给DI。

This page向您展示如何实现

  • 使用using( ... )
  • 在方法范围内管理上下文
  • 或通过@implements IDisposable将其链接到组件生命周期

在两种情况下,您都可以在使用已注册的配置选项时使用DbContextFactory(EF5中的标准问题)来创建它。

所以永远不要注入DbContext本身。