c# 简单实现 插件模型 反射方式
利用反射方式实现插件模型,wpf控件作为插件,然后用另外的窗体加载。
首先定义插件接口:
public interface IUserControlLevel1
{
string PluginName { get; set; }
int PluginIndex { get; set; }
}
userControl继承定义的接口:
/// <summary>
/// UserControl1.xaml 的交互逻辑
/// </summary>
public partial class UserControl1 : UserControl, IUserControlLevel1
{
public UserControl1()
{
InitializeComponent();
} public string PluginName
{
get;
set;
} public int PluginIndex
{
get;
set;
}
}
管理类里定义寻找插件,并返回结果。
主要代码如下:
public static List<IUserControlLevel1> GetUserControlLevel1(string directoryPath)
{
List<IUserControlLevel1> li = new List<IUserControlLevel1>();
string[] files = Directory.GetFiles(directoryPath, "*.dll");
foreach (var file in files)
{
Assembly assembly = Assembly.LoadFrom(file);//加载控件
Type[] types = assembly.GetTypes();//加载所有类型
foreach (var type in types)
{
if (!type.IsClass || type.IsNotPublic)
{
continue;
}
Type[] interfaces = type.GetInterfaces();//加载该类型接口 if (interfaces.Contains(typeof(IUserControlLevel1)))
{
object obj = Activator.CreateInstance(type);
IUserControlLevel1 uc = (IUserControlLevel1)obj; Object obj2 = type.InvokeMember(type.FullName,
BindingFlags.CreateInstance, null, null, null);
IUserControlLevel1 uc2 = (IUserControlLevel1)obj2; li.Add(uc2);
continue;
}
}
}
return li;
}
然后主窗体可以寻找默认路径下的插件 并加载到界面。
源码下载地址如下:
http://files.cnblogs.com/files/lizhijian/%E6%8F%92%E4%BB%B6%E6%A8%A1%E5%9E%8B.rar
感谢每一位阅读此篇文章的人,希望可以帮到你。
c# 简单实现 插件模型 反射方式的更多相关文章
- Ninject之旅之八:Ninject插件模型(附程序下载)
摘要 在前面的章节中,我们看了在单一的绑定条件下Ninject能够处理依赖类型,就是说,每个服务类型只绑定到单一的实现类型.然而,有些情况下我们需要绑定一个抽象服务类型到多个实现,这叫多个绑定.多个绑 ...
- VS简单注释插件——VS插件开发续
VS简单注释插件——VS插件开发续 前些时候,我写过一篇<VS版权信息插件——初试VS插件开发小记>分享过一个用于添加注释信息的插件,但那个插件有几个问题: 不能添加带块注释(/**/), ...
- 在.NET Core中使用简单的插件化机制
前言 插件化,其实也并不是什么新东西了,像nopCommerce等开源项目都有类似的机制,而且功能比较完善和齐全. 相信大家都对接过不少支付方式,支付宝.微信以及各大银行或第三方的支付公司. 我们可以 ...
- 【转】简单谈谈python的反射机制
[转]简单谈谈python的反射机制 对编程语言比较熟悉的朋友,应该知道“反射”这个机制.Python作为一门动态语言,当然不会缺少这一重要功能.然而,在网络上却很少见到有详细或者深刻的剖析论文.下面 ...
- 执行插件的替代方式:用JS调用操作
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复229或者20161028可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...
- java--分析简单java类与反射的联系
分析简单java类与反射的联系 web对反射的操作支持 在JSP之中有一种技术--javaBean.而且在jsp里面也配套有相应的操作方式,javaBean的核心在于简单java类,于是下面演示此操作 ...
- 腾讯大牛教你简单的自动化测试模型(Python+Selenium)
今天讲解简单的自动化测试模型,对于刚接触自动化测试的同学,由于没有编程语言的基础,是搞不懂代码里面的函数.封装.包以及其他概念,只是了解字符串.数组.元组及字典这种最基本的名词,更不懂自动化测试框架了 ...
- Unity3D ShaderLab 简单的立方体图反射
Unity3D ShaderLab 简单的立方体图反射 反射是着色器模拟现实环境的一个关键因素,它能使我们的着色器渲染效果更加具备视觉冲击,因为他利用了我们周围的环境, 让着色器反射外界的场景信息并将 ...
- aptana 插件离线下载方式
aptana 插件离线下载方式 Aptana 网站改版后取消了eclipse 插件的zip直接下载地址,其实aptana 官网仍还提供aptana 插件的zip包下载不过比较隐蔽而已.很多人在线安装时 ...
随机推荐
- CodeForces628-B.New Skateboard
B. New Skateboard time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- 学习Spring必学的Java基础知识(1)----反射
引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓"登高必自卑,涉远必自迩".以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系 ...
- 无序列表li横向排列的间隙问题
今天在写页面的时候,无意中遇到这样一个问题,就是无序列表li横向排列即做成导航栏时,列表项间有间隙. 如: 将列表项li变成列表块后(即将li标签设置为,display:inline-block后), ...
- 算法-java代码实现基数排序
基数排序 第11节 基数排序练习题 对于一个int数组,请编写一个基数排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组.保证元素均小于等于2000. 测试样例: [1 ...
- tp路由+伪静态+去掉index.php
浏览:10536 发布日期:2013/10/08 分类:技术分享 关键字: 路由 伪静态 去掉index.php 之前一个网友说能不能达到这样的效果,www.olcms.com/news/id.htm ...
- libpng+VS2012(VS2015)的使用
OpenCV保存PNG图像底层调用的就是libpng库,简要说一下libPNG库的单独使用. 1.首先需要下载两个库,一个是libpng,一个是zlib libpng库下载地址:http://www. ...
- libz.dylib
1. .dylib意味着这是一个动态链接库. 2. libz.dylib是提供zip压缩解压缩的库
- Appium移动自动化测试之—基于java的iOS环境搭建
本文仅供参考,同时感谢帮助我搭建环境的同事 操作系统的名称:Mac OS X操作系统的版本:10.12.6 接下来我们开始踏上搭建Appium+java+ios之路,本文只说个大概,毕竟本机已经装过了 ...
- php foreach用法和实例
原文地址:http://www.cnblogs.com/DaBing0806/p/4717718.html foreach()有两种用法:1: foreach(array_name as $value ...
- 关于手残,搞废我的OLED屏幕的 追悼会
2017-12-1913:36:41 昨天按照B站的资料利用esp12F做了一个天气站,可预报天气,惭愧的是模型做好了,照片还没拍就夭折了,可怜了我20块的屏幕,我心伤悲,莫知我哀呀! 本来调试已经成 ...