【问题标题】:How to calling a function in a .net dll through an interface loaded through reflection如何通过反射加载的接口调用.net dll中的函数
【发布时间】:2010-10-20 02:14:11
【问题描述】:

你好,我会尽力解释的。

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

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

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

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

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

有什么想法吗?

【问题讨论】:

  • 如果是静态类,怎么实现接口呢?
  • 对不起,它不是一个静态类,GetStrings 返回字符串的静态数组。我的坏。

标签: c# reflection


【解决方案1】:

类似:

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

【讨论】:

    【解决方案2】:

    使用 Assembly.CreateInstance() 创建对象,传递一个“众所周知的名称”。将返回值转换为 IFace,剩下的就很简单了。哦,不要使用 LoadFile,使用 LoadFrom。

    【讨论】:

      【解决方案3】:

      一旦通过反射获得类型(使用类似Assembly.GetType),您就可以使用Activator.CreateInstance

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多