注意这步需要从inversify模块中引入TypeBinding和Kernel,并且为了保证返回值类型以及整个编译时静态类型检查能够顺利通过,泛型语法也被使用了起来。
说到这里,要理解new TypeBinding(“NotebookInterface”, Notebook)也就很自然了:为依赖于”NotebookInterface”字符串的类提供Notebook类的实例,返回值向上溯型到NotebookInterface。
完成了这些步骤,使用起来也还算顺手:
var student: StudentInterface = kernel.resolve("StudentInterface"); console.log(student instanceof Student); // true student.notebook.printName(); // this is a notebook student.pencil.printName(); // this is a pencil student.eraser.printName(); // this is an eraser student.draw(); // drawing student.write(); // writing
最后,顺带提一下ECMAScript中相关提案的现状和进展。Google的AtScript团队曾经有过Annotation的提案,但是AtScript胎死腹中,这个提案自然不了了之了。目前比较有希望成为es7标准的是一个关于装饰器的提案:。感兴趣的同学可以到相关的github页面跟踪了解。尽管DI只是OOP编程众多模式和特性中的一个,但却可以折射出Javascript在OOP上艰难前进的道路。但总得说来,也算得上是路途坦荡,前途光明。回到依赖注入的话题上,一边是翘首以盼的Javascript社区,一边是姗姗来迟的IoC容器,这二者最终能产生怎样的化学反应,让我们拭目以待。
您可能感兴趣的文章: