最佳答案
我应该如何注射(使用。NET Core 的内置依赖注入库 ms.DI)将一个 DbContext
实例转换为一个单例实例?在我的特殊情况下,单例是一个 IHostedService
?
我当前让我的 IHostedService
类在构造函数中接受一个 MainContext
(从 DbContext
派生)实例。
当我运行应用程序时,我得到:
不能使用来自单例的范围服务‘ Microsoft. EntityFrameworkCore.DbContextOptions’‘ Microsoft. Extensions.Hosting.IHostedService’。
因此,我尝试通过指定:
services.AddDbContext<MainContext>(options =>
options.UseSqlite("Data Source=development.db"),
ServiceLifetime.Transient);
在我的 Startup
课上。
但是错误仍然是相同的,即使根据 解决了 Github 的问题,传递的 DbContextOptions
应该具有在 AddDbContext
调用中指定的相同生存期。
我不能使数据库上下文成为单例,否则对它的并发调用会产生并发异常(由于数据库上下文不能保证是线程安全的)。