npm 包 di-con 使用教程

阅读时长 6 分钟读完

简介

di-con 是一个轻量级的依赖注入容器,适用于前端和后端 JavaScript 应用程序。采用 di-con 可以避免手动管理依赖项,减少代码耦合,提高代码复用性和可读性。

安装

可以通过 NPM 安装 di-con:

使用方法

首先需要创建一个容器实例:

然后就可以使用 register 方法将所需的依赖项注册到容器中。该方法接收两个参数:依赖项的名称和实现。

对于类,它会自动创建一个新实例。对于函数,则返回该函数的结果。

有时候我们需要手动传入一个参数来实例化该类,可以使用 registerFactory 方法:

以上代码中,({ db }) 是一个解构参数,使得传入的参数可以通过名称直接访问。这个例子中,容器不会直接实例化 UserRepository,而是需要传入 db对象来实例化。

随后,我们可以使用 resolve 方法从容器中获取依赖项的实例:

这将返回在容器中注册的名称为 userRepository 的实现。如果这个依赖项存在其他依赖项,它们也将递归地从容器中解决。

嵌套容器

有时候,我们需要在某些特定的地方为依赖项创建新的实例,而不是直接使用容器中的单例实例。这时候,我们可以使用嵌套容器来创建新实例。

在上面的示例中,我们创建了一个名为 specialService 的实例,使用 createChild() 方法创建了一个名为 childContainer 的子容器,然后将 specialService 注册到 childContainer 中,最后解决 userRepository 的依赖关系。在这个过程中,childContainer 不会影响父容器。它只是保存了一个单独的依赖项。

类型注入

有时候,我们需要将类本身注册到容器中,而不是从容器中解决实例。这时,我们可以使用 registerType 方法。

以上代码中的 UserService 是一个类。当我们需要创建这个类的实例时,可以使用 resolve 方法:

注意,在这里我们没有传递名称参数,而是传递了一个类参数。

示例

以下是将 di-con 应用于 Express.js 应用程序的示例。

用户存储库 User Repository:

-- -------------------- ---- -------
----- -------------- -
  ------------- -- -- -
    ------- - ---
  -

  --------------- -
    ------ --------------------- - ---- ----- ----- -- - --------
  -
-

用户服务 User Service:

-- -------------------- ---- -------
----- ----------- -
  ------------- -------------- -- -
    ------------------- - ---------------
  -

  ----- --------------- -
    ----- ---- - ----- ------------------------------------

    ------ -
      --- --------
      ----- ----------
      ------ -----------
    --
  -
-

Express.js 控制器 Controller:

-- -------------------- ---- -------
----- -------------- -
  ------------- ----------- -- -
    ---------------- - ------------
  -

  ----- ------------ ---- -
    ----- - -- - - -----------
    ----- ---- - ----- ---------------------------------

    ---------------
  -
-

最后,将这些依赖项注册到容器中:

-- -------------------- ---- -------
----- --------- - --- ------------

-- -------- ------------
------------------------ ----
------------------------------------------- -- -- -- -- --- ---------------- -- ----
---------------------------------------- -- -------------- -- -- --- ------------- -------------- ----
------------------------------------------- -- ----------- -- -- --- ---------------- ----------- ----

-- ------- ----------
----- -------------- - ------------------------------------

通过遵循这些步骤,我们成功创建了一个可维护的、松散耦合的 Express.js 控制器,它通过 di-con 处理了所有的依赖项。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60055b5881e8991b448d8e43

纠错
反馈