2017-02-17 92 views
2

我得到DbContext has been disposed error当我尝试从数据库中获取数据使用下面的代码提及。
由于DbContext已被处置,操作无法完成。 nopcommerce

如何解决此问题?

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(); 
    } 
} 
+0

如果ExampleService类被正确注入,而不是由代码创建,我看不出为什么遇到这个问题。实际上,Autofac管理着物体的生命线,防止这样的事情发生。所以我假设您的示例中缺少代码。只需查看您实例化ExampleService的方式。无论如何,这个评论的主要原因是记住你要在构造函数中注入你的依赖,而不是像你那样使用资源定位器。 ResourceLocator是一种足够糟糕的模式,可以尽量避免。显然,在这种情况下,没有理由。 –

回答

1

问题是对象的某些部分应该处置,而它仍然在使用中。

尝试总是解决这样的服务:

protected readonly IRepository<T> _exampleRepository; 

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

希望这有助于!

1

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

所以我的答案是这样的:在构造函数中使用依赖注入而不是使用ResourceLocator。如果你在构造函数中声明了依赖关系,并且仍然有问题,比如没有接收到IRepository的实例,那么你可以确定你是以错误的方式实例化了ExampleService,而不是在autofac范围之外,这是一个确定的原因为了麻烦。

相关问题