在多层架构中使用依赖注入UnitOfWork踩的坑
1、前提,DbContext 上下文不是线程安全的,不能实现共享或不要单例,不然会有很多问题。有了这个前提当然是把它注入为Scoped。工作单元UnitOfWork中依赖注入的DbContext,UnitOfWork也注册为Scoped;
2、Service层,Bll层和Controller层没有用依赖注入,是直接New一个新对象来使用。Service层使用ServiceProvider.GetService<IUnitOfWork>()获取工作单元。
3、在Controller中有个循环调用 ,杯具出现,总是提示:
A second operation started on this context before a previous operation completed. This is usually caused by different threads using the same instance of DbContext.
通过有道词典翻译:在前一个操作完成之前,在这个上下文中启动第二个操作。这通常是由使用相同DbContext实例的不同线程造成的。
经过各种折腾。发现全部用构造器注入没有问题,而用GetService就好像在多线程中共享了?控制器中New一个Bll对象,Bll中又New一个Service对象,Servicen层中通过工作单元的Dbcontext感觉被工享,但不知道为什么?有知道请指教,感谢!!
浙公网安备 33010602011771号