场景:
dll里面是为了实现某个驱动的接口进行开发的相关实现类
dll文件的路径可配置,那么可反射解耦加载该dll,实例化实现接口的驱动
实现步骤
路径:
C:\\hh\\Rh.Iot.RunConsole\\bin\\Debug\\net6.0\\DriverDll\\Rh.Iot.Driver.某个driver.dll
要求:Dll文件名和里面实现接口的类名一致
这样反射加载的时候就是 创建一个这样的对象
Rh.Iot.Driver.某个driver.某个driver
代码实现,只需要路径就可以反射一个驱动了,通过正则对自己的项目文件命名进行一定的处理
IDriver 是内部的一个接口
//加载dll文件
Assembly asm = Assembly.LoadFile(DriverPath);
//获取类
//Type type = asm.GetType("RH.Iot.Business.EapBaseInfoHandler.GloryMes.GloryMesReciveCheckUserInfoFromMesHandler");
string rules = @"Rh.Iot.Driver.\S{0,100}.dll";
var m = Regex.Matches(DriverPath, rules);
string result = string.Empty;
if (m != null)
{
string[] strs = m[0].Value.Split('.');
result = m[0].Value.Replace("dll", strs[3]);
//Console.WriteLine(result);
}
else
{
return false;
}
Type type = asm.GetType(result);
//创建该类型的实例
IDriver obj = (IDriver)Activator.CreateInstance(type);
//获取该类的方法
//MethodInfo mf = type.GetMethod("InfoHandler");
obj.Start(DriverParas);
只提供思路,不提供完整代码!
我是狗子,希望你幸福!