-
Notifications
You must be signed in to change notification settings - Fork 224
插件开发实例·C#
keepwn edited this page Nov 15, 2014
·
3 revisions
- 新建一个C#类库工程,命名为Test_DoNetPlugin。
- 添加引用
Altman.Plugin.dll
和Eto.dll
,请不要引用System.Windows.Forms.dll
。 - 新建类PluginInfo.cs,继承于
IPluginInfo
,用于定义插件信息。
using System.Reflection;
using Altman.Plugin;
using Altman.Plugin.Interface;
namespace Test_DoNetPlugin
{
public class PluginInfo : IPluginInfo
{
public string Name
{
get { return "DoNetPluginTest"; }
}
public string FileName
{
get { return Assembly.GetExecutingAssembly().ManifestModule.Name; }
}
public string Version
{
get { return Assembly.GetExecutingAssembly().GetName().Version.ToString(); }
}
public string Author
{
get { return "Keepwn"; }
}
public string Description
{
get { return "this is a .net plugin demo."; }
}
}
}
- 新建类PluginSetting.cs,继承于
IPluginSetting
,用于定义插件配置。其中:
-
IsAutoLoad
用于设置插件是否需要自动加载; -
IndexInList
用于设置插件出现在Plugins菜单中的位置 -
LoadPath
用于设置插件装载点,默认为空,如果需要作为某个插件的子插件,则可以填写为父插件名。
using Altman.Plugin;
using Altman.Plugin.Interface;
namespace Test_DoNetPlugin
{
public class PluginSetting : IPluginSetting
{
public bool IsAutoLoad
{
get { return false; }
}
public int IndexInList
{
get { return 1; }
}
public string LoadPath
{
get { return ""; }
}
}
}
- 新建类Plugin.cs,继承于
IControlPlugin
,用于实现插件接口。其中:
- 如果继承于
IControlPlugin
,则创建控件类插件,插件将出现在标签页中 - 如果继承于
IFormPlugin
,则创建窗体类插件,插件将以窗体形式出现 - 类名前需要声明导出类型
[Export(typeof(IPlugin))]
,声明这是一个IPlugin类型的插件 - 同时还需要定义一个
IHost
类型的_host
字段,同时声明[Import(typeof(IHost))]
,此字段可以调用由宿主框架提供的各种方法。(只有在插件构造函数初始化完毕后,此字段才会被实例化,也就是说在构造函数中无法使用这个字段) -
Load()
用于插件初始化,由框架默认调用,当插件构造函数初始化完毕后,将自动调用该方法。经常用于插件的初始化操作,如果初始化正常,则返回true,默认为true -
Show(PluginParameter data)
用于显示插件。参数类型为PluginParameter
,返回类型为Panel
或Form
using System.ComponentModel.Composition;
using Altman.Plugin;
using Altman.Plugin.Interface;
namespace Test_DoNetPlugin
{
[Export(typeof(IPlugin))]
public class Plugin : IControlPlugin
{
private object _userControl;
private PluginInfo _pluginInfo;
private IPluginSetting _pluginSetting;
[Import(typeof(IHost))]
private IHost _host;
public Plugin()
{
_pluginInfo = new PluginInfo();
_pluginSetting = new PluginSetting();
}
public IPluginInfo PluginInfo
{
get { return _pluginInfo; }
}
public IPluginSetting PluginSetting
{
get { return _pluginSetting; }
}
public bool Load()
{
return true;
}
public object Show(PluginParameter data)
{
return _userControl = new DoNetPluginTest(_host, data);
}
public void Dispose()
{
_userControl = null;
}
}
}
- 新建类DoNetPluginTest.cs,继承于
Panel
,用于实现插件界面。
using System;
using System.Text;
using Altman.Plugin;
using Altman.Plugin.Interface;
using Eto.Drawing;
using Eto.Forms;
namespace Test_DoNetPlugin
{
public class DoNetPluginTest : Panel
{
private TextBox _tbxMsg;
private Button _btnShowMsgInStatus;
private IHost _host;
public DoNetPluginTest(IHost host, PluginParameter data)
{
_host = host;
Init();
}
void Init()
{
_tbxMsg = new TextBox();
_btnShowMsgInStatus = new Button {Text = "Show Msg In Status", Width = 150};
_btnShowMsgInStatus.Click+=btn_showMsgInStatus_Click;
var layout = new DynamicLayout {Padding = new Padding(10, 10), Size = new Size(10, 10)};
layout.AddSeparateRow(new Label() { Text = "Msg", VerticalAlign = VerticalAlign.Middle }, _tbxMsg, null);
layout.AddAutoSized(_btnShowMsgInStatus);
layout.Add(null);
this.Content = layout;
}
private void btn_showMsgInStatus_Click(object sender, EventArgs e)
{
_host.Ui.ShowMsgInStatusBar(_tbxMsg.Text);
}
}
}
- 编译程序为
Test_DoNetPlugin.dll
,将二进制文件保存在Plugins/Test_DoNetPlugin/Test_DoNetPlugin.dll
,要求保存的目录与插件名同名。 - 运行主程序,即可在菜单
Plugins
中找到插件Test_DoNetPlugin
。