Независимо от внедрения зависимости, этот метод может использовать только один и тот же экземпляр, поскольку _repository
установлен только для чтения. Это означает, что другой экземпляр StudentRepository
не может быть назначен ему в течение срока службы контроллера.
Хотя в. net core AsTransient
означает создание нового экземпляра каждый раз, когда это требуется, это будет только быть каждый раз, когда вызывается конструктор, т. е. один раз на HTTP-запрос.
Обновление согласно комментарию
Чтобы увидеть, где AsTransient
будет иметь значение, мы потребуется ввести еще один уровень абстракции.
Если мы добавим слой service / business logi c следующим образом:
class AService
{
private readonly StudentRepository _repository;
AService(StudentRepository repository)
{
_repository = repository;
}
}
class AnotherService
{
private readonly StudentRepository _repository;
AnotherService(StudentRepository repository)
{
_repository = repository;
}
}
Затем добавьте службы в контроллер:
class StudentController : Controller
{
private readonly AService _aService;
private readonly AnotherService _anotherService;
StudentController (AService aService, AnotherService anotherService)
{
_aService = aService;
_anotherService = anotherService;
}
}
Каждый сервис будет иметь другой StudentRepository
экземпляр, так как новый создается при вызове каждого конструктора.
При изменении AsTransient
на AsScoped
платформа будет повторно использовать один экземпляр для полного HTTP-запроса, что означает, что обе службы будут иметь один и тот же экземпляр.