繁体   English   中英

如何通过反射加载的接口调用.net DLL中的函数

[英]How to calling a function in a .net dll through an interface loaded through reflection

您好我会尽力解释一下。

基本上,我使用Assembly.LoadFile通过反射加载库。

从那里我有一个接口IFace,它定义了一个返回字符串数组的方法“GetStrings”。

动态加载的DLL有一个名为“Class1”的类,它实现了IFace。

我需要一种通过动态加载的lib调用这个interfaced方法的方法。 我想保持紧密耦合,这让我想知道该怎么做。 我知道我可以使用MethodInvoker来调用该方法,但我正在尝试找到一种方法,我可以做这样的事情:

IFace obj = (IFace)ReflectionAssembly.Class1;
string[] strs = obj.GetStrings();

有任何想法吗?

就像是:

    var assm = Assembly.Load("ClassLibrary1");
    var type = assm.GetType("ClassLibrary1.Class1");
    var instance = Activator.CreateInstance(type) as IFace;
    string[] strings = instance.GetStrings();

使用Assembly.CreateInstance()创建对象,传递一个“众所周知的名称”。 将返回值转换为IFace,其余的很容易。 哦,不要使用LoadFile,请使用LoadFrom。

一旦你有了反射类型(使用像Assembly.GetType这样的东西),你可以使用Activator.CreateInstance

IFace obj = (IFace)Activator.CreateInstance(class1Type);
string[] strs = obj.GetStrings();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM