-
Notifications
You must be signed in to change notification settings - Fork 224
插件开发
keepwn edited this page Nov 15, 2014
·
7 revisions
插件接口主要分两类:
-
Altman.Plugin.Interface.IFormPlugin 独立窗体形式的插件
- C#版
- 引用插件框架
Altman.Plugin.dll
- 引用UI框架
Eto.dll
- 移除对
System.Windows.Forms
和System.Drawing
的引用 - 如果是创建.Net插件,推荐以类库模板方式创建
- 引用插件框架
- IronPython版
-
导入
clr
模块,clr添加引用Altman.Plugin
import clr clr.AddReference('Altman.Plugin')
-
- 插件需要实现
IControlPlugin
或者IControlPlugin
接口 - 插件需要申明
[Import(typeof(IHost))]
和[Export(typeof(IPlugin))]
。以C#和IronPython为例:-
C#
[Export(typeof(IPlugin))] public class Plugin : IControlPlugin { [Import(typeof(IHost))] private IHost _host; // others... }
-
IronPython
@export(IPlugin) class Plugin(IControlPlugin): @import_one(IHost) def import_host(self, host): self.host = host
-
-
调用注册方法
PluginServiceProvider.RegisterService
,可以将插件的某些方法作为服务注册到全局插件服务中去。它们的调用方法如下:PluginServiceProvider.RegisterService(string serviceName, string serviceTypeName, Func<PluginParameter, dynamic> func)
PluginServiceProvider.RegisterService(IPlugin provider, string serviceName, string serviceTypeName, Func<PluginParameter, dynamic> func)
-
provider
表示此插件服务的提供者(可选),serviceName
表示插件服务名,serviceTypeName
表示此插件服务的分类,func
为此插件服务的具体方法
-
以C#和Iron为例:
-
C#
public static string Base64_Encode(PluginParameter args) { var str = args[0]; return Convert.ToBase64String(Encoding.Default.GetBytes(str)); } PluginServiceProvider.RegisterService(plugin, "ToBase64", "Encode", Base64_Encode);
-
IronPython
def hex_decode(args): return args[0].decode('hex') PluginServiceProvider.RegisterService("FromHex", "Decode", hex_decode)
-
调用查询方法
PluginServiceProvider.GetService
,可以获取指定插件服务并调用执行。它们的调用方法如下:PluginServiceProvider.GetService(string serviceName)
-
serviceName
表示插件服务名
-
以C#为例:
var base64 = PluginServiceProvider.GetService("ToBase64"); var result = base64(new PluginParameter("str", "Test"));