Generic ServiceからGenericRepにDbContextを破棄しようとしています。.NETコアでオーバーライドするDisposeメソッドがないのはなぜですか?
私の一般的なレポは、ここで説明したパターン実装されています。私は私のレポでの最初の部分を設定している 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
を:
彼らはStudentControllerでこれを持って記事の今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);
}
:
protected override void Dispose(bool disposing)
{
studentRepository.Dispose();
base.Dispose(disposing);
}
IDisposableなどを実装しているStudentControllerはありません。 彼らは、DisposeをObjectの標準オーバーライド可能なメソッドとしてオーバーライドすることができるようです。
これを私のGeneric Serviceに入れる必要があります。ここで
は私の汎用サービスです:
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);
}
だから私は私のコードの上に2つの赤いsquiggliesを持っています。
1)GenericServiceを上書きする適切なメソッドが見つかりません。
これはフルフレームワークで標準オーバーライド可能なオブジェクトですが、.Netコアではありませんか?
2)オブジェクトには、base.Dispose呼び出しでDisposeの定義が含まれていません。
これはどういうわけか.Net Coreで行われていますか?
UPDATE 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);
}
それは一種の少数の処分のために、動作します。 しかし、それはぶら下がりを開始するようです。
はSystem.Object' 'には'のDispose() 'はありません。彼らはそのメソッドを持っている 'Controller'から継承しています。 – CodeCaster
'Controller'はすでに' IDisposable'から継承しています。 'Dispose()'メソッドを削除し、 'Dispose(bool disposing)'を 'override'に更新してください。 – Nkosi
githubの[Controller](https://github.com/aspnet/Mvc/blob/44048331e936de39073ca5eab97bd5b5cdb0a0f2/src/Microsoft.AspNetCore.Mvc.ViewFeatures/Controller.cs#L361)のソースコードを見てください。コントローラーの廃棄方法をいくつか変更する必要があります。 – Nkosi