由于已经处理了DbContext,因此无法完成操作。 nopcommerce

时间:2017-02-17 12:20:55

标签: nopcommerce nopcommerce-3.80

当我尝试使用下面提到的代码从数据库获取数据时,我得到DbContext has been disposed error

如何解决这个问题?

public class ExampleService<T> where T : Example
{
   protected readonly IRepository<T> _exampleRepository;

   public ExampleService()
   {
     _exampleRepository= EngineContext.Current.Resolve<IRepository<T>>();
   }

   public IList<T> GetService()
   {
     var query = _exampleRepository.Table;
     return query.ToList();
   }
} 

2 个答案:

答案 0 :(得分:1)

问题是对象的某些部分应该在处理时使用。

尝试始终以这种方式解析服务:

protected readonly IRepository<T> _exampleRepository;

var _exampleRepository = EngineContext.Current.Resolve<IRepository<T>>();

希望这有帮助!

答案 1 :(得分:1)

我认为您的示例中没有足够的代码。如果您从依赖范围获取ExampleService,它应该可以正常工作。

所以我的答案是这样的:在构造函数中使用依赖注入,而不是使用ResourceLocator。如果您在构造函数中声明依赖项而仍然存在问题,例如,没有接收到IRepository的实例,那么您可以确保在autofac范围之外以错误的方式实例化ExampleService,这是一个肯定会有麻烦。