跳到主要内容
版本:Next

扩展(Extension)

扩展(Extension) 作为 Molecule 最重要的核心模块之一,主要是提供了一套扩展 IDE Workbench 的机制。通过这种机制,我们可以轻松的实现自定义,并且可以管理这些扩展应用。

扩展接口(IExtension)

扩展(Extension) 是一个包含 idnameactivatedispose属性方法的接口,通过该接口类型,可以帮助开发者更快的创建扩展程序。

Molecule 支持你使用字面量或者 class 关键字的方式来定义扩展对象,具体看开发者自己的偏好。

自面量对象

import { IContributeType, IExtension } from '@dtinsight/molecule/esm/model';
import { IExtensionService } from '@dtinsight/molecule/esm/services';

export const ExampleExt: IExtension = {
id: 'ExampleExt',
name: 'Example Extension',
contributes: {},
activate(extensionCtx: IExtensionService) {},
dispose(extensionCtx: IExtensionService) {},
};

class 对象

import molecule from '@dtinsight/molecule';
import { IExtension } from '@dtinsight/molecule/esm/model/extension';
import { IExtensionService } from '@dtinsight/molecule/esm/services';

export class ExampleExt implements IExtension {
id: string = 'ExampleExt';
name: string = 'Example Extension';

activate(extensionCtx: IExtensionService): void {
// Do something
}

dispose(extensionCtx: IExtensionService): void {
// Do something
}
}

扩展服务(ExtensionService)

在 Molecule 中,我们可以通过 ExtensionService 服务对象来管理扩展程序。例如添加、查询、删除等操作, 例如:

// Add Extension, but no activated
molecule.extension.add(extensions);
// Dispose the Extension
molecule.extension.dispose(extensionId);
// Get an Extension
molecule.extension.getExtension(extensionId);

禁用扩展

在有些情况下,开发者可能会想要禁用一些 Molecule 中内置的扩展程序,这里可以使用 ExtensionService 中的 inactive 方法,示例:

import React from 'react';
import molecule from '@dtinsight/molecule';
import { create, Workbench } from '@dtinsight/molecule';
import '@dtinsight/molecule/esm/style/mo.css';

// All Extension instances
import extensions from './extensions';

const moInstance = create({
extensions,
});

moInstance.onBeforeLoad(() => {
molecule.extension.inactive((ext) => {
// Inactive the Extension which id is ExampleExt
return extension.id === 'ExampleExt';
});
});

const App = () => moInstance.render(<Workbench />);

export default App;
caution

需要注意到是,inactive 方法,需要在 create 导出的生命周期 onBeforeLoad 中使用。