.NET中简单的插件实现

这几天给自己做了一个信息助理,提示自己的工作按排。

以前没有接触过XML,所以这次决定正好试验以下。

这个信息助理和FoxMail的邮件信息提示很像,用过FoxMail的人就知道了。本来要发截图但是新的Blog好像不太正常。

这个程序整个都是用XML做数据保存和配置文件。昨天早上突发奇想,为何不用XML配置文件来标示外部扩展程序路径,然后在主程序载入时根据XML文件中插件配置信息动态生成菜单,点击菜单后根据插件路径来执行外部插件呢?于是我就开始动手做了。

插件的XML配置文件格式如下

<?xml version="1.0" encoding="utf-8" ?>
<PlusIns>
     <PlusIn>
         <Name>界面设置</Name>
         <Path>PlusIn/SkinSetting.exe</Path>
     </PlusIn>
     <PlusIn>
         <Name>消息管理</Name>
         <Path>PlusIn/MsgManager.exe</Path>
     </PlusIn>
     <PlusIn>
         <Name>定时提醒</Name>
         <Path>PlusIn/Timer.exe</Path>
     </PlusIn>
     <PlusIn>
         <Name>插件编辑器</Name>
         <Path>PlusIn/PlusEdit.exe</Path>
     </PlusIn>
</PlusIns>

菜单就根据配置文件中的Name来显示,执行的时候就根据Path指定的路径执行。

菜单的动态生成很简单,就是Add菜单的MenuItem。每读到一个插件信息就创建一个新的MenItem并将Cleck事件指向同一个事件执行代码。代码如下:

private void LoadPlusIn()
{
   XMLHelper helper = new XMLHelper();
   
   XmlDocument doc = new XmlDocument();

   doc.Load("plusin.xml");

   //读取插件配置
   string[] plusins = helper.SearchAnnal(doc,"PlusIn");

   if(plusins != null)
   {
    this.MI_PlusIn.MenuItems.Clear();

    //添加菜单
    for(int i=0; i<plusins.Length; i+=2)
    {
     MenuItem newItem = new MenuItem(plusins[i]);
     newItem.Click += new EventHandler(newItem_Click);

     this.MI_PlusIn.MenuItems.Add(newItem);
    }
   }
}

然后在这个公共的事件执行代码里将Object类型的sender强制转换为MenuItem类型然后获取它的text属性,再根据这个属性找到XML中对应的插件Path,使用Process.Start方法执行Path所指向的可执行文件。这样插件就被运行了。菜单的点击事件代码如下:

private void newItem_Click(object sender, EventArgs e)
{
   XMLHelper helper = new XMLHelper();
   
   XmlDocument doc = new XmlDocument();

   doc.Load("plusin.xml");

   //查找插件的路径
   string[] plusin = helper.SearchAnnal(doc,"PlusIn[Name=" + "'" + ((MenuItem)sender).Text + "']");

   try
   {
    //执行插件
    Process.Start(plusin[1]);
   }
   catch(Exception ex)
   {
    MessageBox.Show("运行外部插件失败:" + ex.Message);
   }
}

注意:

上面的XMLHelper是我自己为了方便封装好的一个XML助手类,节省了一些繁琐操作。大家应用自己的XML操作代码替换之。

使用Process需要引用System.Diagnostics命名空间。

截图1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值