zhtsdi
Version:
Typescript写的依赖注入库。An dependency-injection library for TypeScript.
94 lines (68 loc) • 1.75 kB
Markdown
# Dependency Injection for TypeScript
tags: TypeScript DI
---
在学习Angular2的时候遇到了依赖注入,发现这个东西非常有用。于是便尝试自己实现了一下。
##API
目前只有几个API:
*
*
* Injector.get()
##示例
####
```TypeScript
class A {
}
class B {
private val = '1234';
constructor(private a: A) {
}
getVal() {
return this.val;
}
setVal(newval) {
this.val = newval;
}
}
// 使用Injector.get,不需要提供参数即可获取实例
let b = Injector.get(B);
let b2 = Injector.get(B);
// 测试:同一个Class可以被实例化多次,每个实例都是不同的对象。
let newVal = 'zzzz';
b.setVal(newVal);
assert.equal(b.getVal(), newVal);
assert.equal(b2.getVal(), '1234');
```
####
```TypeScript
class SingletonClass {
private val = '1234';
constructor(private a: A) {
}
get() {
return this.val;
}
set(newval) {
this.val = newval;
}
}
let b = Injector.get(SingletonClass);
let b2 = Injector.get(SingletonClass);
// 测试:被@Singleton()装饰的类,所有句柄都应该指向同一个对象
let newVal = 'zzzz';
b.set(newVal);
assert.equal(b.get(), newVal);
assert.equal(b2.get(), newVal);
```
## 构建&测试
>npm install
>npm test
## 为什么是而不是
装饰器本不需要添加一个括号的。就像这样:
```TypeScript
class A{}
```
强制性添加括号是为了和Angular2的装饰器保持一致;也为了实现更好的扩展性。