标题:插件构架
取消只看楼主
zhoufeng1988
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:北京
等 级:贵宾
威 望:27
帖 子:1432
专家分:6329
注 册:2009-5-31
结帖率:100%
 问题点数:0 回复次数:0 
插件构架
看以前在群里发的邮件,有一个关于插件构架的。拿出来让新手们看看。

------------------------------------------
-^_^!我写的是最简单,只是为了大家方便阅读。
大家可以在这个程序的基础上,进行扩展。
------------------------------------------
程序有三个项目。

第一个是主程序,主窗体。
第二个是插件实例。【插件就是这个了^_-!】
第三个是插件所实现的接口。
 
具体实现:
1.插件接口如下:
 
using System;
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
    }
}

这个类应该很简单吧?呵呵。简单就对了。
这个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;
                }
            }
        }
    }
}

这个是插件程序中最重要的。通过动态加载程序集,并创建程序集中实现IPLugin接口的实例。然后我们就可以使用插件了。
大家可以仔细看看源码。看完这个后,自己有兴趣可以去做一个。



好了。这就是,最简单的插件构架。万变不离其宗。我想我应该是以最通俗易懂的方式来写的。相信自己,相信Learning C#.
PluginForLearningCSharp.zip (363.23 KB)


[ 本帖最后由 zhoufeng1988 于 2009-10-30 01:14 编辑 ]
搜索更多相关主题的帖子: 插件 构架 
2009-10-30 01:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-290444-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.391545 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved