Раньше люди располагали контроллерами, которые наследовали класс Controller
. Является ли все еще хорошей практикой ручное удаление ApplicationDbContext
в контроллерах / службах, поскольку библиотека DI обрабатывает удаление? Нам нужно только зарегистрировать наш дескриптор контекста.
services.AddDbContext<SaveBeesContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
Пример кода:
// Startup.cs
services.AddScoped<IAuthService, AuthService>();
namespace Test.Controllers
{
[Route("api/[controller]")]
[ApiController]
[Authorize]
public class AuthController : ControllerBase, IDisposable
{
private readonly IAuthService _authService;
private readonly IMapper _mapper;
public AuthController(IAuthService authService, IMapper mapper)
{
_authService = authService;
_mapper = mapper;
}
// ...
private bool disposed = false;
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
_authService.Dispose();
}
}
this.disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
}
namespace Test.Services
{
public interface IAuthService : IDisposable
{
// ...
}
public class AuthService : IAuthService
{
private readonly ApplicationDbContext _context;
public AuthService(ApplicationDbContext context)
{
_context = context;
}
// ...
private bool disposed = false;
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
_context.Dispose();
}
}
this.disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
}