UNPKG

zhtsdi

Version:

Typescript写的依赖注入库。An dependency-injection library for TypeScript.

94 lines (68 loc) 1.75 kB
# Dependency Injection for TypeScript tags: TypeScript DI --- 在学习Angular2的时候遇到了依赖注入,发现这个东西非常有用。于是便尝试自己实现了一下。 ##API 目前只有几个API: * @Injectable() * @Singleton() * Injector.get() ##示例 #### @Injectable() ```TypeScript @Injectable() class A { } @Injectable() 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'); ``` ####@Singleton ```TypeScript @Singleton() 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 ## 为什么是@Injectable()而不是@Injectable 装饰器本不需要添加一个括号的。就像这样: ```TypeScript @Injectable class A{} ``` 强制性添加括号是为了和Angular2的装饰器保持一致;也为了实现更好的扩展性。