c# 反射与插件(插件的制作与应用 实现的流程)

=================插件实施与应用基本流程

1,开发此程序的人 提供接口(提供DLL)

2,第三方开发团队(开发插件)严格按照接口,实现功能。并打包成DLL

3,使用者下载第三方开发团队开发出来的插件,并把查询复制到程序相应的文件夹里

=================程序开发思想

1,在程序中创建一个类库,在内库中定义一个接口

2,第三方开发团队拿到接口,并是实现其功能。打包成dll文件

3,copy第三方团队开发的dll到程序指定的目录

4,找到dll存放的路径

5,遍历所有dll的路径

6,通过路径加载程序集(插件)

7,加载程序集(插件)中所有的公共的类

8,加载接口类

9,遍历插件的所有的公共类

10,判断接口是否能够与插件里的类对接

11,如果能,则反射

===================================================Form1主窗体

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Reflection;
namespace MyReflect
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
LoadAssembly();
}
private void LoadAssembly()
{
//获取存放dll插件的文件路径
string mypath = Directory.GetCurrentDirectory() + "\\MyDll";
string[] filepath = Directory.GetFiles(mypath, "*.dll");
//办理路径
foreach (string file in filepath)
{
//根据路径加载文件下的程序集
Assembly ass = Assembly.LoadFrom(file);
//获取程序集中所有公有的类
Type[] tclass= ass.GetExportedTypes();
//获取接口的类
Type tform= typeof(InterfaceForm.FormTitle);
//------------------------------------------------
int i = 0;
//------------------------------------------------
//遍历插件的所有公共类
foreach (Type t in tclass)
{
//判断接口是否能与插件的类对接
if (tform.IsAssignableFrom(t))
{
//反射
InterfaceForm.FormTitle tf = Activator.CreateInstance(t) as InterfaceForm.FormTitle;
Button b = new Button();
b.Text = t.Name;
b.Location = new Point(0, i);
b.Tag = tf;
b.Click += b_Click;
Controls.Add(b);
}
i += 50;
}
}
}
void b_Click(object sender, EventArgs e)
{
Button b= sender as Button;
InterfaceForm.FormTitle tf= b.Tag as InterfaceForm.FormTitle;
tf.GetFT(this);
}
}
}

=============================================接口

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace InterfaceForm
{
public interface FormTitle
{
void GetFT(Form f);
}
}

=============================================插件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace IsOk
{
public class Class1:InterfaceForm.FormTitle
{
public void GetFT(Form f)
{
f.Text = "我是class1";
}
}
}

【如果需要源代码,请给我留言】

c# 反射与插件(插件的制作与应用 实现的流程),布布扣,bubuko.com

时间: 2024-12-31 12:36:52

c# 反射与插件(插件的制作与应用 实现的流程)的相关文章

制作IOS ANE的基本流程

来源:http://www.swfdiy.com/?p=1239 1. 使用xcode新建ios上的static library 工程 2. 从air sdk/include里拷贝flashruntimeExtension.h 进工程目录并引用之 3. 使用c, 结合flash runtime extenstion的一些API实现你要的本机功能 4. 编译工程生成静态库: test.a 5. 下面过程可以脱离mac 6. fb里新建一个flex library project, 添加AS类, 用

ZAM 3D 制作简单的3D字幕 流程(二)

原地址:http://www.cnblogs.com/yk250/p/5663907.html 接着 ZAM 3D 制作简单的3D字幕 流程(一) .本篇将是ZAM 3D制作动画的一些关键点. 我们可以将各个字体工具自己的喜好填充好Materials,当然,也可以采用默认,一般默认灯光下是偏金黄色的,这个可以在左下角进行调节.左下第一个是当前选中的灯光设置,第二个则是全局的灯光设置.(如果你拖动了布局那就另当别论了.)比如我这里将字体染成了葫芦娃的红橙黄绿蓝靛紫以及葫芦小金刚的白色(注意,字体分

在.NET中使用反射实现简易插件机制

本篇是我学习反射的一个应用小场景而做的学习笔记,主要是一个小的总结,并对各个步骤的记录,以便将来回顾. 一.基础框架-敏捷基础版本 这里假定我们要开发一个记事本,选择Windows Form技术开发,界面如下图所示: 该记事本只提供了一个TextBox供输入,以及保存到指定文件.其他功能均没有实现,假定我们先把这个版本做出来,后续功能通过插件形式一步一步完成. 但是,为了能够使用插件,我们的主项目还得经过一些改造: (1)加载时需要从插件目录中获取插件 public FormMain() { I

一个插件程序的制作过程(一)

0x00 前言 其实做插件相关的程序是我梦寐以求的东西,很早我就开始设想,但是那时候还不会C#,C++又比较晦涩难懂,微软的组件技术还停留在COM+的水平上,自己设计插件系统的学习成本实在太大.所以就一直憋着憋着.现在上手学C#才发现,反射是一个好用的东西,它他适合做组件化程序了. 于是我就开始做了一个简单的Demo. 1 class Program 2 { 3 static string[] _methods; 4 static string _PluginName; 5 static str

Xamarin.iOS - 利用Settings插件与EAIntroView制作App的欢迎界面

http://www.midifan.com/moduleuser-index-412239.htmhttp://www.midifan.com/moduleuser-index-412183.htmhttp://www.midifan.com/moduleuser-index-412163.htmhttp://www.midifan.com/moduleuser-index-412200.htmhttp://www.midifan.com/moduleuser-index-412224.htm

[秋声赋]Xamarin.iOS - 利用Settings插件与EAIntroView制作App的欢迎界面

http://www.midifan.com/moduleuser-index-430717.htmhttp://www.midifan.com/moduleuser-index-430547.htmhttp://www.midifan.com/moduleuser-index-430688.htmhttp://www.midifan.com/moduleuser-index-430540.htmhttp://www.midifan.com/moduleuser-index-430836.htm

【iOS发展-49】的插件-插件该文档的凝视VVDocumenter安装与使用

文件凝视是/**   */.快捷键///. 但是,这需要安装插件.VVDocumenter. 下载链接:https://github.com/onevcat/VVDocumenter-Xcode (1)安装方法 里面有.最简单的就是下载后,打开VVDocumenter-Xcode.xcodeproj文件.然后CMD+R执行一下.再CMD+Q全然退出Xcode.再次打开Xcode就能用. (2)用法 在须要文档凝视的上面连续输入三个/,即///,当输入第三个/的时候.它会自己主动生成文档凝视,且非

JS-纯js制作动态成绩表(流程控制语句+js内置对象)

流程控制for循环+if判断+Math对象+Array对象+Date对象制作成绩表 <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>综合运用</title> <style type="text/css"> body { text-align: center; font: 14px "微软雅黑";

关于制作一个网页的工作流程概述

第一步:项目需求评审(明确需求) 第二步:等待ui设计师提供psd(项目需求技术调研) 第三步:等到ui设计师设计稿通过以后,给前端制作静态html+js(自己在浏览器或者移动设置上浏览,查看是否有兼容问题) 以上为基本制作流程 以下几步为项目对接-一直到发布到线上的过程 第四步:前后台数据对接完成-测试没有问题以后,提交测试环境(任务给测试人员) 第五步:修改测试返回的问题(直到测试通过为准) 第六步:测试发送测试报告以后,提交预生产环境,先试着跑1到2周,观察情况(测试回归任务检验开发任务是