C# Blazor、对象生命周期和依赖注入
我正在做我的第一个Blazor项目,我面临一个关于对象生命周期的问题 确切的问题是,我的EFC# Blazor、对象生命周期和依赖注入,c#,entity-framework,dependency-injection,blazor,lifetime,C#,Entity Framework,Dependency Injection,Blazor,Lifetime,我正在做我的第一个Blazor项目,我面临一个关于对象生命周期的问题 确切的问题是,我的EFDbContext永远不会被释放,因此在第一次数据库更新之后,任何后续更新都会失败,因为异常告诉我实体已经被上下文跟踪 因此,在调查之后,我发现所有依赖注入服务在应用程序启动时都会得到解决,并且永远不会被处理,DbContext也是如此,它作为一个工作单元被注入 在MVC中,端点对象在调用结束时被释放,因此DbContext被释放,而这个问题永远不会发生 但在Blazor中,物体的寿命是不同的。作为一种良
DbContext
永远不会被释放,因此在第一次数据库更新之后,任何后续更新都会失败,因为异常告诉我实体已经被上下文跟踪
因此,在调查之后,我发现所有依赖注入服务在应用程序启动时都会得到解决,并且永远不会被处理,DbContext
也是如此,它作为一个工作单元被注入
在MVC中,端点对象在调用结束时被释放,因此DbContext
被释放,而这个问题永远不会发生
但在Blazor中,物体的寿命是不同的。作为一种良好的实践,我应该在需要时手动获取解析DbContext
,还是遗漏了什么
编辑:
我还应该补充一点,我的
DbContext
被添加到IServiceCollection
,因为作用域Blazor没有服务器所拥有的方便的请求作用域
您应该自己管理上下文,不能(完全)将其留给DI
向您展示如何
- 使用(…)管理方法作用域中的上下文
- 或者使用
@implements IDisposable
在这两种情况下,您都可以在使用注册的配置选项时使用DbContextFactory(EF5中的标准版本)来创建它
所以永远不要注入DbContext本身。您到底是如何注入DbContext的?张贴代码。please.services.AddDbContext(选项);这是我第一次创建工厂模式。它就像一个符咒!