ASP.NET Core 3.0 располагает контроллерами и сервисами - PullRequest
0 голосов
/ 14 октября 2019

Раньше люди располагали контроллерами, которые наследовали класс 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);
        }
    }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...