Dev

第三方应用集成方案

将 Malagu 核心组件集成第三方应用程序,复用 Malagu 提供的 IoC 能力,在这里我们提供了一些集成案例,从而举一反三。

Malagu 框架核心组件是提供了 IoC 能力的基础组件。我们使用 Malagu 命令行可以快速初始化一个 Malagu 应用,在 Malagu 应用中默认集成了核心组件,并且基于 Malagu 命令行工具开箱即用。也有不少开发者咨询如何将 Malagu 核心组件集成第三方应用程序,复用 Malagu 提供的 IoC 能力,在这里我们提供了一些集成案例,方便大家参考,从而举一反三。

Malagu 框架核心组件提供了 ContainerFactory 和 ApplicationFactory 工厂类,都可以快速创建一个 IoC 容器,前者是后者的功能子集。ApplicationFactory 工厂类除了创建 IoC 容器以外,还提供了应用生命周期管理。大部分情况推荐使用 ApplicationFactory 工厂类。

VSCode 插件集成方案

import * as vscode from "vscode";
import { Application, autoBind } from "@malagu/core";
import { ApplicationFactory } from "@malagu/core/lib/common/application/application-factory";
import webCommonModule from "@malagu/web/lib/common/module"; // 插件中需要要到与 HTTP 请求相关的模块
import { ExtensionContext } from "./utils";
import "./index"; // 插件中需要注入到 IoC 容器的类文件声明
import { init as initI18n } from "vscode-nls-i18n";

let application: Application | undefined;

export async function activate(context: vscode.ExtensionContext) {
  initI18n(context.extensionPath);
  // 使用 ApplicationFactory 工厂类创建一个 Application 对象,参数为配置对象 + 一些列的需要注入到 IoC 容器的模块
  // 在 Malagu 应用中,一般是通过 malagu.yml 配置文件提供配置信息,而在第三方集成方案中,可以通过第一个参数提供
  application = await ApplicationFactory.create(
    {},
    webCommonModule,
    autoBind((bind) => {
      bind(ExtensionContext).toConstantValue(context); // 将插件的 context 作为常量注入到 IoC 容器中,方便其他托管类对象随时使用
    })
  );
  // 启动应用,该方法同时会激活相应的应用生命周期事件
  await application.start();
}

export function deactivate() {
  // 保险起见,在插件停用的时候,关闭应用,让应用可以释放掉不需要的资源,以及完成一些收尾工作
  application?.stop();
}

Copyright © 2024 Zero (github@groupguanfang) 粤ICP备2023102563号