Sam*_*Sam 5 c# dispose asp.net-core-mvc
我正在尝试从我的通用服务中处理我的 GenericRep 中的 DbContext。
我的通用存储库正在实现此处描述的模式: https://learn.microsoft.com/en-us/aspnet/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/在 asp-net-mvc 应用程序中实现存储库和工作单元模式
我已经在我的仓库中设置了第一部分:
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);
}
Run Code Online (Sandbox Code Playgroud)
现在在文章中,他们在 StudentController 中有这样的内容:
protected override void Dispose(bool disposing)
{
studentRepository.Dispose();
base.Dispose(disposing);
}
Run Code Online (Sandbox Code Playgroud)
他们没有 StudentController 实现 IDisposable 或任何东西。我猜他们似乎能够重写 Dispose 作为对象上的标准可重写方法。
所以我需要将其放入我的通用服务中。
这是我的通用服务:
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);
}
Run Code Online (Sandbox Code Playgroud)
所以我的代码上有两个红色的波浪线。
1) 没有找到合适的方法来覆盖 GenericService。
这是完整框架中的标准可重写对象,但不是 .Net Core 中的吗?
2) 对象不包含 base.Dispose 调用上的 Dispose 定义。
这只是在 .Net Core 中以不同的方式完成吗?
更新1:
感谢 Nkosi 在下面的回答(回答 1)。
所以现在我从控制器调用 serviceRepo dispose,如下所示:
[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);
}
Run Code Online (Sandbox Code Playgroud)
对于一些人来说,它确实有效。但随后它似乎开始悬挂。
通用服务必须像通用存储库中一样定义/实现一次性的。当前类正在定义它,因此没有任何可覆盖或可调用的基础。
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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9688 次 |
| 最近记录: |