【问题标题】:Dynamically load a type from an external assembly从外部程序集中动态加载类型
【发布时间】:2010-03-29 03:14:26
【问题描述】:

如果调用代码没有对该程序集的静态引用,我如何在运行时从另一个程序集中加载托管类型?

为了澄清,假设我将 Lib.cs 中的类 Lib 编译成 Lib.dll。我想在一个名为 Foo.dll 的单独程序集中编写一个类 Foo,它没有静态引用 Lib.dll,而是加载 Lib.dll,然后反映类 Lib 的存在,然后调用一个方法就可以了。

对不起,关于反射的这么明显的问题。我认为在阅读几篇文章的论坛上获得答案所需的时间要少得多。

【问题讨论】:

    标签: c# reflection


    【解决方案1】:

    这是一个简短的sn-p:

    Assembly assembly = Assembly.LoadFile("Lib.dll");
    ILib lib = (ILib)assembly.CreateInstance("Lib");
    lib.doSomething();
    

    当然,Lib 类必须实现 ILib 接口,该接口必须可以从 Foo.dll 和 Lib.dll 访问。这样你就实现了抽象。

    【讨论】:

    • 谢谢你,佩塔。这对我来说是一个足够好的开始。我正在坚定我对设计的想法,但我还没有决定是希望调用者拥有合同还是使用 MethodInfo[] 来反映被调用对象的 vtable。再次感谢。
    猜你喜欢
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多