Blazor Server中Transient服务生命周期与DbContext注入安全性问题
Blazor组件中DbContext注入的生命周期安全问题
核心疑问
我研究了ASP.NET Core Razor组件的生命周期后认为:每次请求生命周期的Transient服务,在不创建后台线程的前提下,可安全用于非线程安全的实例。哪怕OnInitialized()这类方法里的代码执行耗时数秒,只要代码执行完成、页面渲染结束,请求就会终止,对应的Transient实例也会被永久销毁。
那针对DbContext来说,同样假设不创建后台线程,既然Singleton或Scoped注入方式不安全,那Transient注入是否安全?有没有我忽略的风险点?
如果Transient注入确实安全,能不能让AddDbContextFactory()生成Transient生命周期的DbContext?我查看相关类后,没找到设置生成实例生命周期的方法。另外,在Razor文件里用[Inject]声明的话,实例的生命周期是Scope或Singleton,和组件生命周期绑定,而非组件处理的每次请求。
更新补充
我之前的表述不够准确,实际顾虑的是这段代码:
[Inject] private UserDbContext UserDbContext { get; set; } = default!;
我理解这个实例是由AddDbContextFactory创建的,生命周期为Scope,担心这种Scope生命周期会引发问题,但几乎所有示例都在用[Inject]这种方式。
内容的提问来源于stack exchange,提问作者David Thielen
相关产品推荐
相关产品推荐

