一,IOC控制反转,DL依赖注入
//场景
class a {
name: string
constructor(/*name:string*/) { //强耦合
this.name = "张三"
}
}
class b {
name: string
constructor(/*name:string*/) { //强耦合
this.name = "李四"
}
}
class box {
a: any
b: any
constructor() {
this.a = new a() //强耦合
this.b = new b() //强耦合
}
}
//解耦合
class A {
name: string
constructor(name: string) {
this.name = name
}
}
class B {
name: string
constructor(name: string) {
this.name = name
}
}
//容器
class Container {
box: any
constructor() {
this.box = {}
}
//注入
injection(key: string, model: any) {
this.box[key] = model
}
//读取
get(key: string) {
return this.box[key]
}
}
const container = new Container()
container.injection('a', new A('张三'))//注入a
container.injection('b', new B('李四'))//注入b
class BOX {
a: any
b: any
constructor() {
this.a = container.get('a')//获取引用
this.b = container.get('b')//获取引用
}
}
二,NestJs-装饰器
TypeScript装饰器参考 TypeScript 5 装饰器 - stage3提案