456 - 《依赖注入》

发布于 2024年7月9日

新手笔记,欢迎指正。之前没接触过这种模式,由于要参与维护一个内部框架,他用了 inversify + reflect-metadata 做依赖注入来组织代码,所以就学习下。

1、说下概念。

在聊依赖注入(Dependency Injection,简称 DI)之前,需要先聊下 IoC。IoC 全程 Inversion of Control(控制反转),是一种设计原则,用于实现松耦合的系统,通过将对象的创建和依赖关系的管理交给外部容器或框架,让代码更加模块化和可测试。

IoC 有多种实现方法,比如 DI、事件驱动和模版方法等,其中 DI 应该是最常见的方式。DI 有 3 个核心概念,1)Dependency,2)Injection,将 Dependency 传给类,3)Container,用于管理依赖性的生命周期。

借助 TypeScript,通常可以用 reflect-metadata + inversify 实现依赖注入。

熟悉 Angular 的同学应该对此会比较熟悉,我没用过,所以对 DI 没啥概念。

2、快速上手。

$ pnpm i inversify reflect-metadata typescript father -D

编辑 tsconfig.json。

{
  "compilerOptions": {
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "lib": [
      "esnext",
      "dom"
    ]
  }
}

编辑 src/index.ts 。

import 'reflect-metadata';
import { Container, injectable, inject } from "inversify";

let TYPES = {
  Foo: Symbol.for("Foo"),
  Bar: Symbol.for("Bar"),
};

@injectable()
class Foo {
  doSomething() {
    console.log(`Foo is do

内容预览已结束

此内容需要会员权限。请先登录以查看完整内容。