一种C#的插件式实现(二)_从dll中读取插件信息
来源:互联网 发布:走心机编程 编辑:程序博客网 时间:2024/05/22 07:49
前面一篇我们介绍了从xml配置中获取要加载的插件。获取插件信息后,需要将插件加载到我们的框架中。
加载插件最重要的一个函数是Activator.CreateInstance,其MSDN介绍如下:
//
// 摘要:
// 使用指定类型的默认构造函数来创建该类型的实例。
//
// 参数:
// type:
// 要创建的对象的类型。
//
// 返回结果:
// 对新创建对象的引用。
//
public static object CreateInstance(Type type);
这里我们对这个函数不做太多介绍,后面介绍插件间的类实现时再详细探讨。
关键代码如下:
// 装载程序集 Assembly assembly = Assembly.LoadFrom(file); // 检查程序集中每一个公开的类型 foreach (Type t in assembly.GetExportedTypes()) { // 该类型是否类、是否实现了IParent接口? if (t.IsClass && typeof(IParent).IsAssignableFrom(t)) { // 创建实现了IPlugin接口的类的对象 IParent plugin = Activator.CreateInstance(t) as IParent; ((BaseParent)plugin).m_Interface = Pub.g_IParents; ((BaseParent)plugin).m_IsCanReceiveMsg = true; ((BaseParent)plugin).m_ImageList = Pub.g_ImageList; ((BaseParent)plugin).g_TabControl = Pub.g_TabControl; // 添加到集合中 Pub.g_IParents.Add(plugin); Pub.g_TabControl.TabPages.Add(((BaseParent)plugin).g_Page); ((BaseParent)plugin).g_Page.Image = Pub.g_ImageList.Images[index]; ((BaseParent)plugin).g_Page.Tooltip = PluginsInfo.m_PluginTips[index]; ((BaseParent)plugin).g_SqlConnectionString = Pub.g_SqlConnectionString; DBAccess.DbHelperSQL.connectionString = Pub.g_SqlConnectionString; index++; PubMethods.ClsIniFile.WriteLog("Loading", "LoadingPlugins" + index.ToString(),((BaseParent)plugin).g_Page.Tooltip); } //每个动态库中只能有一个类继承Parent.BaseParent //如果没有继承IParent,则被忽略 else continue; }
阅读全文
0 0
- 一种C#的插件式实现(二)_从dll中读取插件信息
- 一种C#的插件式实现(一)_读取xml配置
- 插件62:从表中读取信息
- 从 C# 中使用插件
- C#实现的调用Quartz.dll的定时任务插件
- PHP中插件机制的一种实现方案
- PHP中插件机制的一种实现方案
- PHP中插件机制的一种实现方案
- PHP中插件机制的一种实现方案
- PHP中插件机制的一种实现方案
- PHP中插件机制的一种实现方案
- PHP中插件机制的一种实现方案
- 从Eclipse插件中读取资源
- C# Window编程随记——第三方读取Excel表格数据的插件(NPOI.dll)
- 插件22:从URL地址读取链接信息
- 用C++实现的一种插件体系结构-----概述(转)
- C++插件机制的一种实现方法(对象工厂)
- C++实现的一种插件体系结构
- 动态规划 ① HDU-2062 Subset Sequence
- 【51Nod1379】索函数
- 位运算技巧(持续更新)
- 数据库的原理,一篇文章搞定(一)
- 链表中环的入口节点
- 一种C#的插件式实现(二)_从dll中读取插件信息
- c++ 内存管理
- C++ String类的构造函数、拷贝构造函数的实现
- ubuntu(linux)文件系统分区调整(可以解决根目录空间不足,而/home空间比较大的情况)
- C# WinForm窗体应用(第四天)
- 【学生信息管理系统】3021错误原因及解决办法
- 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数
- Apache Kafka监控之KafkaOffsetMonitor
- 新一代打包神器Walle(瓦力)使用小结