日期:2014-05-18  浏览次数:20854 次

用C#实现一个插件架构的系统
各位:由于系统的特殊性,现在有一个系统如下设计:
1.将业务模块做成dll,根据需要加载,
2.将dll以xml文件形式配置,根据需要配置,
3.系统加载dll,并根据dll的功能并动态生成菜单项。
4.菜单事件由dll自己实现,
问题是在动态创建菜单时,需要指定菜单事件,如何将dll中的菜单事件指派到该创建的菜单上那??
如下:
sysMenu.Click += new EventHandler(Dll_Menu_Click);
Dll_Menu_Click函数在dll是实现,

希望各位大侠有好的建议和想法,共同讨论......

------解决方案--------------------
sysMenu.Click += new EventHandler(this.Menu_Click); 

private void Menu_Click(object sender, EventArgs e)
{
//这里通过反射调用相应的DLL中的方法
}
------解决方案--------------------
这不是个简单的问题,笼统的来说
先要写好接口,这步最关键了,如果写的好那就容易的多了
再继承特定的接口
然后利用反射调用dll

------解决方案--------------------
该问题可以解决,但是代码太多,不好贴上来
------解决方案--------------------
楼主了解一下反射的知识,也不是很复杂,我贴其中的两种方式出来,功能是返回一个订单接口IOrder

C# code

  //方法一
            //"SQLServerDAL"是指模块所在的命名空间
            IOrder order = Assembly.Load("SQLServerDAL").CreateInstance("SQLServerDAL.Order") as IOrder;


            //方法二
            //"SQLServerDAL.DLL"是指模块所在的DLL
            IOrder order = Assembly.Load("SQLServerDAL.DLL").CreateInstance("SQLServerDAL.Order") as IOrder;

------解决方案--------------------
象普元的东西。

XML配置
------解决方案--------------------
可以看看SharpDeveloper的实现。
------解决方案--------------------
制定接口...

实现, 再利用反射加载DLL就可以了...

^o^
------解决方案--------------------
up 学习中
------解决方案--------------------
看看SharpDevelop,原作者参加过Eclipse核心代码的开发
相当于用C#重写了一遍Eclipse,结构非常好,不过占内存

我前年开发的项目就是基于SharpDevelop的,还不错
------解决方案--------------------
up
学习一下
------解决方案--------------------
我参考一下