더북(TheBook)

테스트를 성공시킬 구현부를 작성하자(예제 2-20).

예제 2-20 의존성을 제공

소스 파일 2장\DI\DiContainer.js

DiContainer.prototype.register = function(name,dependencies,func) {
 
var ix;
 
if (typeof name !== ‘string’ | |
  !Array.isArray(dependencies) | |
  typeof func !== ‘function’) {
  throw new Error(this.messages.registerRequiresArgs);
}
 
for (ix=0; ix<dependencies.length; ++ix) {
  if (typeof dependencies[ix] !== ‘string’) {
    throw new Error(this.messages.registerRequiresArgs);
  }
}
 
this.registrations[name] = { dependencies: dependencies, func: func };
};
 
DiContainer.prototype.get = function(name) {
var self = this,
    registration = this.registrations[name],
    dependencies = [];
 
if (registration === undefined) {
  return undefined;
}
 
registration.dependencies.forEach(function(dependencyName) {
  var dependency = self.get(dependencyName);
  dependencies.push( dependency === undefined ? undefined : dependency);
});
return registration.func.apply(undefined, dependencies);
};

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