插件构架
看以前在群里发的邮件,有一个关于插件构架的。拿出来让新手们看看。------------------------------------------
-^_^!我写的是最简单,只是为了大家方便阅读。
大家可以在这个程序的基础上,进行扩展。
------------------------------------------
程序有三个项目。
第一个是主程序,主窗体。
第二个是插件实例。【插件就是这个了^_-!】
第三个是插件所实现的接口。
具体实现:
1.插件接口如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
namespace PluginInterface
{
public interface IPlugin
{
Image SetBackImage { get;}
}
}
using System.Collections.Generic;
using System.Text;
using System.Drawing;
namespace PluginInterface
{
public interface IPlugin
{
Image SetBackImage { get;}
}
}
这个接口很简单,继承这个接口的类都必须有一个获取图片的属性。没有设置图片哦,因为只有get。呵呵!
2.创建插件。这个也是很简单的。只是实现了一个IPlugin接口就完了。
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using PluginInterface;
namespace PluginInstance
{
public class Plugin : IPlugin
{
private Image BackImage;
#region IPlugin 成员
public Image SetBackImage
{
get
{
this.BackImage = (Image)Resource.UT;
return this.BackImage;
}
}
#endregion
}
}
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using PluginInterface;
namespace PluginInstance
{
public class Plugin : IPlugin
{
private Image BackImage;
#region IPlugin 成员
public Image SetBackImage
{
get
{
this.BackImage = (Image)Resource.UT;
return this.BackImage;
}
}
#endregion
}
}
这个类应该很简单吧?呵呵。简单就对了。
这个Rescource是一个资源文件。在项目中新建一个资源文件,然后放一张图片就可以了。
好的!插件就设计完了。
3.应用插件。
using System;
using System.Collections.Generic;
using
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
using PluginInterface;
namespace PluginForLearningCSharp
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
LoadPlugin();
this.BackgroundImageLayout = ImageLayout.Stretch;
}
private void LoadPlugin()
{
Assembly plugin = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + @"\PluginInstance.dll");
Type[] types = plugin.GetTypes();
foreach (Type t in types)
{
Type biInterface = t.GetInterface("IPlugin");
if (biInterface != null)
{
IPlugin pluginInterface = (IPlugin)plugin.CreateInstance(t.FullName);
this.BackgroundImage = pluginInterface.SetBackImage;
}
}
}
}
}
using System.Collections.Generic;
using
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
using PluginInterface;
namespace PluginForLearningCSharp
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
LoadPlugin();
this.BackgroundImageLayout = ImageLayout.Stretch;
}
private void LoadPlugin()
{
Assembly plugin = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + @"\PluginInstance.dll");
Type[] types = plugin.GetTypes();
foreach (Type t in types)
{
Type biInterface = t.GetInterface("IPlugin");
if (biInterface != null)
{
IPlugin pluginInterface = (IPlugin)plugin.CreateInstance(t.FullName);
this.BackgroundImage = pluginInterface.SetBackImage;
}
}
}
}
}
这个是插件程序中最重要的。通过动态加载程序集,并创建程序集中实现IPLugin接口的实例。然后我们就可以使用插件了。
大家可以仔细看看源码。看完这个后,自己有兴趣可以去做一个。
好了。这就是,最简单的插件构架。万变不离其宗。我想我应该是以最通俗易懂的方式来写的。相信自己,相信Learning C#.
PluginForLearningCSharp.zip
(363.23 KB)
[ 本帖最后由 zhoufeng1988 于 2009-10-30 01:14 编辑 ]