什么是依赖注入(DI)与控制反转(IOC)
这两个概念不要搞混了,IOC其实是面向对象编程中的一种设计模式,而DI则是为了实现IOC的一种技术。
传统耦合代码
比如,我们有两个类,它们之间存在耦合关系,我们一般会这样写:
// A.ts
class A {
name: string
constructor(name: string) {
this.name = name
}
}
// B.ts
class B {
age: number
name: A
constructor(age: number) {
this.age = age
this.name = new A('南玖')
}
}
// main.ts
const b = new B(18)
console.log(b)
当我们遇到类与类之间存在依赖关系时,一般会直接在类的内部创建依赖对象,这样就会导致各个类之间形成耦合,并且这种关系会随着依赖关系越来越复杂从而耦合度也会越来越高,最终造成代码的难以维护。
简易版IOC
为了解决上面代码带来的耦合性问题,我们可以使用IOC容器来进行管理
// container.ts
export class Container {
modules = new Map()
// 注册实例
provide(key: string, clazz: any, argvs: Array<any>) {
this.modules.set(key, {clazz, argvs})
}
// 获取实例
get(key: string) {
const {clazz, argvs} &