浅析依赖注入框架的生命周期(以 InversifyJS 为例)
warning:
这篇文章距离上次修改已过190天,其中的内容可能已经有所变动。
import "reflect-metadata";
import { Container, injectable, inject } from "inversify";
// 创建一个容器
const container = new Container();
// 创建一个有限制条件的接口
interface HasName {
name: string;
}
// 创建一个标记接口
interface TYPES {
// 为接口成员提供注入标签
controller: HasName;
}
// 创建一个可注入的服务
@injectable()
class MyService {
public constructor() {
console.log("MyService 被创建");
}
}
// 创建一个控制器,它依赖 MyService
@injectable()
class MyController {
public constructor(@inject(MyService) public myService: MyService) {
console.log("MyController 被创建");
}
}
// 绑定类到 TYPES 接口成员,实现注入
container.bind<HasName>(TYPES.controller).to(MyController);
container.bind<HasName>(MyService).to(MyService);
// 解析依赖,获取实例
const controller = container.get<HasName>(TYPES.controller);
// 控制台输出:
// MyService 被创建
// MyController 被创建
这段代码展示了如何在 TypeScript 中使用 InversifyJS 来创建一个简单的依赖注入框架。它定义了一个接口 HasName
和一个标记接口 TYPES
来作为注入的标签。MyService
和 MyController
类被标记为可注入,并且通过 container.bind
方法将它们绑定到对应的类型上。最后,使用 container.get
方法来解析和获取实例,同时可以看到在创建 MyController
实例时,MyService
也被自动创建了。
评论已关闭