Attendee = function (service, messenger, attendeeId) {
if (!(this instanceof Attendee)) {
return new Attendee(attendeeId);
}
this.attendeeId = attendeeId;
this.service = service;
this.messenger = messenger;
}
var attendee = new Attendee(new ConferenceWebSvc(), new Messenger(), id);
创建新对象时, 如果一下问题的任意一项答案为Yes, 应当使用注入而不是直接实例化
专业的依赖注入框架工作模式如下:
我们的容器应该做两件事:
我的注册函数register
需要三个参数
TDD要求每一个阶段编写最少的代码, 所以我们以一个空函数开始. 因为这个函数应该被所有DiContainer
实例共享, 我们把它放在原型上.
DiContainer = function () {};
DiContainer.prototype.register = function (name, depencencies, func) {};
我们为这个函数编写测试用例DiContainer00-test.js, 需要注意:
现在执行测试会失败, 我们需要给register
函数添加类型检查DiContainer01.js
DiContainer.prototype.messages = {
registerRequiresArgs: 'The register function requires three arguments: ' +
'a string, an array of strings, and a function'
};
我们将错误提示信息包含在prototype中, 方便用户自定义修改, 维护.
下一步我们实现get(name)
函数, 根据名字实例化对象, 仍然先写测试用例检查类型