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

时间:2010-10-20 02:14:11

标签: c# reflection

您好我会尽力解释一下。

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

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

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

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

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

有什么想法吗?

3 个答案:

答案 0 :(得分:6)

类似的东西:

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

通过反射输入类型(使用Assembly.GetType之类的内容)后,您可以使用Activator.CreateInstance

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