ReservationsController는 생성자 주입(constructor injection)[25]을 사용해서 주입된 repository를 수신하고, 나중에 사용할 수 있도록 읽기 전용 프로퍼티로 저장합니다. 클래스가 적절하게 초기화되면 Post 메서드에서 이 정보를 사용할 수 있다는 의미입니다. 하드코딩된 예약을 생성하면 일단 테스트는 통과할 수 있습니다. 하지만 이 방식은 명백하게 잘못된 방식이죠. 테스트를 동작시킬 수 있는 가장 간단한28 방법일 뿐입니다[22].
예제 4-15 주입된 저장소에 예약 정보를 저장합니다.
(Restaurant/bc1079a/Restaurant.RestApi/ReservationsController.cs)
[ApiController, Route("[controller]")]
public class ReservationsController
{
public ReservationsController(IReservationsRepository repository)
{
Repository = repository;
}
public IReservationsRepository Repository { get; }
public async Task Post(ReservationDto dto)
{
if (dto is null)
throw new ArgumentNullException(nameof(dto));