如何从加载的DLL中获取对象

时间:2013-02-14 20:43:58

标签: c#

我在SO上看到这个问题相当多,而且我遵循了这个建议,但我似乎做错了什么。 dll似乎加载正常,但返回的对象CreateInstance为null。

我有这个dll:

namespace Backfill
{
public class Module : Kernel.Module
{
    public override void ModuleStart()
    {
        //Stuff
    }
}
}

在另一个具有DIFFERENT命名空间的DLL

namespace Kernel
{

public abstract class Module
{
    public abstract void ModuleStart();
}



public static void KernelStart()
    {
        string load_dll = @"Path to DLL";

        Assembly test_dll = Assembly.LoadFile(load_dll + ".dll");

        Module test_mod = (Module)test_dll.CreateInstance("Kernel.Module");

        test_mod.ModuleStart();
    }
}
但是,

(Module)test_dll.CreateInstance("Kernel.Module");返回null。知道为什么吗?

2 个答案:

答案 0 :(得分:4)

(Module)test_dll.CreateInstance("Kernel.Module")

这不起作用。正如您指定的那样,您尝试实例化的Module类(我假设是第一个DLL中的那个)不在Kernel命名空间中,而是在{{1命名空间。因此,您应该遵循这些方针:

Backfill

答案 1 :(得分:2)

Kernel.Module是一个抽象类。您无法直接创建它的实例。您需要创建派生类的实例。

编辑:提供更多信息:

@Antonijn有相同的答案。您需要直接指定所需的类型。 BackFill.Module看起来是正确的。

编辑前:

如果在多个程序集中具有相同的名称,则需要使用所需类型的完全限定(包括程序集名称)。例如:https://stackoverflow.com/a/2300428/30225作为可能的答案。