代码之家  ›  专栏  ›  技术社区  ›  Dave

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

  •  3
  • Dave  · 技术社区  · 16 年前

    你好,我会尽力解释的。

    基本上,我正在使用assembly.loadfile通过反射加载库。

    在那里,我有一个接口iface,它定义了一个方法“getStrings”,该方法返回一个字符串数组。

    动态加载的dll有一个名为“Class1”的类,该类实现iface。

    我需要一种通过动态加载的lib调用这个接口方法的方法。我想把它紧紧地连在一起,这让我想知道该怎么做。我知道我可以使用MethodInvoker调用该方法,但我正在尝试找到一种方法,我可以这样做:

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

    有什么想法吗?

    3 回复  |  直到 11 年前
        1
  •  5
  •   lesscode    16 年前

    类似:

        var assm = Assembly.Load("ClassLibrary1");
        var type = assm.GetType("ClassLibrary1.Class1");
        var instance = Activator.CreateInstance(type) as IFace;
        string[] strings = instance.GetStrings();
    
        2
  •  2
  •   Hans Passant    16 年前

    使用assembly.createInstance()创建对象,将其传递为“已知名称”。将返回值强制转换为iface,其余的很容易。哦,不要使用loadfile,使用loadfrom。

        3
  •  1
  •   Reed Copsey    16 年前

    一旦你有了通过反射的类型(使用 Assembly.GetType ),您可以使用 Activator.CreateInstance :

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