gpt4 book ai didi

c# - 为什么在 .Net Core 中没有要覆盖的 Dispose 方法?

转载 作者:行者123 更新时间:2023-12-04 16:10:18 27 4
gpt4 key购买 nike

我正在尝试从我的通用服务中处理我的 GenericRep 中的 DbContext。

我的通用仓库正在实现这里描述的模式:
https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application

我已经在我的 repo 中设置了第一部分:

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。

这是完整框架中的标准可覆盖对象,而不是 .Net Core 吗?

2) 对象不包含对 base.Dispose 调用的 Dispose 定义。

这只是在 .Net Core 中以某种方式不同吗?

更新 1:

感谢 Nkosi 在下面的回答(答案 1)。

所以现在我像这样从我的 Controller 调用 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);
}

它有点工作,对于一些处置。
但随后它似乎开始挂起。

最佳答案

通用服务必须像在通用存储库中一样定义/实现一次性。由于当前类正在定义它,因此没有什么可以覆盖或调用的基础。

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);
}
}

引用 Implementing a Dispose Method

关于c# - 为什么在 .Net Core 中没有要覆盖的 Dispose 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43294927/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com