我正试图从我的通用服务处理我的GenericRep中的DbContext。
我在我的回购中设置了第一部分:
public class GenericRepository<T> : IGenericRepository<T>, IDisposable
where T: BaseEntity
{
protected readonly ApplicationDbContext _context;
protected DbSet<T> _dbSet;
.
.
.
private bool disposed = false;
protected virtual void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
_context.Dispose();
}
}
this.disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
现在在文章中他们在StudentController中有这个:
protected override void Dispose(bool disposing)
{
studentRepository.Dispose();
base.Dispose(disposing);
}
他们没有StudentController实现IDisposable或任何东西。 他们似乎只能将Dispose重写为Object上的标准可覆盖方法。
所以我需要把它放在我的通用服务中。
这是我的通用服务:
public class GenericService<T> : IGenericService<T>
where T : BaseEntity
{
private IGenericRepository<T> _genericRepo;
public GenericService(IGenericRepository<T> genericRepo)
{
_genericRepo = genericRepo;
}
.
.
.
public override void Dispose(bool disposing)
{
_genericRepo.Dispose();
base.Dispose(disposing);
}
所以我的代码上有两个红色的波浪形。
1)找不到合适的方法来覆盖GenericService。
这是Full Framework中的标准可覆盖对象,但不是.Net Core吗?
2)对象不包含基于Dis.Dispose调用的Dispose定义。
这在.Net Core中是以不同方式完成的吗?
更新1:
感谢Nkosi在下面给出了答案(答案1)。
所以现在我正在调用serviceRepo来自我的控制器:
[Route("api/[controller]")]
public class CasesController : Controller, IDisposable
{
private readonly IGenericService<Case> _caseGenericService;
public CasesController(IGenericService<Case> caseGenericService)
{
_caseGenericService = caseGenericService;
}
.
.
.
private bool disposed = false;
protected virtual void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
_caseGenericService.Dispose();
base.Dispose();
}
}
this.disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
它有点工作,有些处理。 但它似乎开始悬挂。
答案 0 :(得分:2)
通用服务必须像通用存储库一样定义/实现一次性服务。当前正在定义它时,没有什么可以覆盖或基于调用。
public class GenericService<T> : IGenericService<T>, IDisposable
where T : BaseEntity
{
private IGenericRepository<T> _genericRepo;
public GenericService(IGenericRepository<T> genericRepo)
{
_genericRepo = genericRepo;
}
.
.
.
private bool disposed = false;
// Protected implementation of Dispose pattern.
protected virtual void Dispose(bool disposing)
{
if (disposed)
return;
if (disposing) {
_genericRepo.Dispose();
// Free any other managed objects here.
//
}
// Free any unmanaged objects here.
//
disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}