C#插件式开发
2021-03-13 15:27
标签:director using eof load 补充 遍历 创建 tin 获取 记录一下C#插件式开发。 原理:主要模块【运行DLL(共享DLL)】、【界面主程序】、【插件DLL】 原理没时间写太详细,以后有机会再补充吧,先上传代码。 以下是C#DLL程序集代码,命名为【Runtime】 以下是C#DLL程序集代码,命名为【Plugin】 以下是C#Console程序集代码,命名为为【Main】 C#插件式开发 标签:director using eof load 补充 遍历 创建 tin 获取 原文地址:https://www.cnblogs.com/smallshu/p/12536435.htmlusing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Runtime
{
public interface IAdd
{
int Add(int a, int b);
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Runtime;
namespace Plugin
{
public class Operation : IAdd
{
public int Add(int a, int b)
{
return a + b;
}
}
}
using Runtime;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace Main
{
class Program
{
static void Main(string[] args)
{
string[] files = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.dll");
// 遍历所有的dll文件,可以自己规定插件名称(比如“*.plugin.dll” = "123.plugin.dll") 进行过滤
foreach (string fn in files)
{
// 获取程序集
Assembly ass = Assembly.LoadFrom(fn);
// 获取所有类,但是此处并没有被实例化。
foreach (Type pClass in ass.GetTypes())
{
// 判断该类是否是实现了接口
if (pClass.GetInterface("IAdd") == (typeof(IAdd)))
{
// 创建实例类
object obj = ass.CreateInstance(pClass.FullName);
// 获取类方法
MethodInfo fun = pClass.GetMethod("Add");
// 执行类方法
object result = (int)fun.Invoke(obj, new object[] { 1, 30 });
Console.WriteLine(result);
}
}
}
Console.ReadLine();
}
}
}