더북(TheBook)

Attendee를 어떻게 DiContainer 안에 넣는지 주목하라. 매우 중요한 고급 기법이다. Attendee를 만드는 함수가 아닌, Attendee를 만들 팩토리를 만드는 함수가 등록을 대신한다. Attendee는 자신의 의존성 외에도 attendeeId 파라미터가 필요하므로 DI 컨테이너는 이렇게 코딩한다.

var attendee = MyApp.diContainer.get('Attendee', attendeeId);

 

하지만 그러면 다른 객체의 재귀적 의존성으로 Attendee를 제공할 방법이 없다(일반적으로 여타 객체들이 attendeeId를 자신이 시작된 체인의 최상위 지점에서 죽 전달받아 내려왔으리라고 보기는 어렵다).

예제 2-22에서 보다시피 팩토리가 있으면 애플리케이션 깊숙한 곳에서도 DI 컨테이너로부터 Attendee를 가져올 수 있다.

예제 2-22 팩토리에서 Attendee를 인스턴스화

var attendeeId = 123;
var sessionId = 1;
 
// DI 컨테이너에서 attendeeId를 넘겨 Attendee를 인스턴스화한다.
var attendee = MyApp.diContainer.get(‘AttendeeFactory’)(attendeeId);
attendee.reserve(sessionId)

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.