C# IAuthorizationHandler作为singleton给了我线程相关的问题
在C# IAuthorizationHandler作为singleton给了我线程相关的问题,c#,asp.net-core,C#,Asp.net Core,在startup.cs中,我有以下代码行: services.AddSingleton(IAuthorizationHandler, RoleBasedHandler>().cs 它给出了数据库操作中的错误,错误消息显示: 在上一个操作之前在此上下文上启动了第二个操作 操作已完成。这通常是由使用 同一个DbContext实例 当我将startup.cs中的代码行更改为: services.Transient(IAuthorizationHandler, RoleBasedHandler
startup.cs
中,我有以下代码行:
services.AddSingleton(IAuthorizationHandler, RoleBasedHandler>().cs
它给出了数据库操作中的错误,错误消息显示:
在上一个操作之前在此上下文上启动了第二个操作
操作已完成。这通常是由使用
同一个DbContext实例
当我将startup.cs
中的代码行更改为:
services.Transient(IAuthorizationHandler, RoleBasedHandler>()
错误已经消失了。我的理解是,单例版本RoleBasedHandler
只创建一个DbContext
对象,并尝试在同时执行的线程中重用它DbContext
对象不能与多个线程一起工作,因此它会中断
对于我的案例,什么是最佳实践建议?显然,您需要单独的处理程序和/或使它们在每个线程中使用dbcontext,而不是单个db上下文 不知道这是从哪里来的-你的处理程序,他们是预先打包的吗?这意味着创建它们的人犯了一个重大错误——因为它们与您所说的内容不符
一般来说,它们不应该是单例。如何创建/请求
DbContext
类的实例?你能给我看一下代码吗?