Simple Robot v4.6.0 Help

插件 Plugin

插件simbot-api 对外公开的接口类型 Plugin, 它的定义如下:

public interface Plugin

是的, Plugin 接口的定义没有任何约束, 因此 Plugin 可以由实现者自由定义。

使用插件

插件用于构建 Application 的过程中, 注册后根据 Application 对其工厂所提供的各种信息来实现其功能。

首先假设我们有如下这样的一个 Plugin 实现:

class FooPlugin : Plugin { companion object Factory : PluginFactory<FooPlugin, Unit> { override val key: PluginFactory.Key = object : PluginFactory.Key {} override fun create(context: PluginConfigureContext, configurer: ConfigurerFunction<Unit>): FooPlugin { return FooPlugin() } } }

安装

接下来我们要在 Application安装(install) 这个假设出来的 FooPlugin:

launchSimpleApplication { install(FooPlugin) }
Applications.launchApplicationAsync(Simple.INSTANCE, configurer -> { configurer.install(FooPlugin.Factory); });
Applications.launchApplicationBlocking(Simple.INSTANCE, configurer -> { configurer.install(FooPlugin.Factory); });

配置

假如 FooPlugin 有可配置的信息的话, 也可以使用 DSL/Lambda 对其进行配置:

launchSimpleApplication { install(FooPlugin) { // 配置... } }
Applications.launchApplicationAsync(Simple.INSTANCE, configurer -> { configurer.install(FooPlugin.Factory, conf -> { // 配置... }); });
Applications.launchApplicationBlocking(Simple.INSTANCE, configurer -> { configurer.install(FooPlugin.Factory, conf -> { // 配置... }); });

事后获取

当我们注册完成、并启动了一个 Application 之后, 如果想要获取注册过的组件, 则可以在 Application 中找到它们:

val app = launchSimpleApplication { install(FooPlugin) } app.plugins.forEach { plugin -> // 所有注册了的插件 }
Applications.launchApplicationAsync(Simple.INSTANCE, configurer -> { configurer.install(FooPlugin.Factory); }).asFuture().thenAccept(app -> { for (var component : app.getPlugins()) { // 所有注册了的插件... } });
var app = Applications.launchApplicationBlocking(Simple.INSTANCE, configurer -> { configurer.install(FooPlugin.Factory); }); for (var plugin : app.getPlugins()) { // 所有注册了的插件... }
Last modified: 19 September 2024