GetInterface始终返回null

时间:2014-03-20 03:13:15

标签: c# reflection .net-assembly

我尝试编写一个dll并通过控制台程序调用,部分编码如下, 但不知何故,我不知道为什么getinterface总是返回null然后我不能调用dll中的函数。

MYDLL.DLL

namespace mynamespace
{
    public interface IMyClass
    {
       void test();
    }

    public class MyClass : IMyClass
    {
       public void test()
       {
          // Do Something here
       }
    }
}

应用:

class Program
{
    static void Main(string[] args)
    {            
        List<object> output = new List<object>();

        Assembly assembly = Assembly.LoadFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "MyDLL.dll"));

        foreach (Type t in assembly.GetTypes())
        {
            if (t.IsClass && !t.IsAbstract && t.GetInterface("mynamespace.IMyClass") != null)
            {
                output.Add(Activator.CreateInstance(t));
            }
        }

        Console.WriteLine("Log is written successfully. Press any key to exit");
        Console.Read();
    }
}

我不知道为什么t.GetInterface("mynamespace.IMyClass")总是返回null?

1 个答案:

答案 0 :(得分:0)

您需要限定类型名称。默认情况下.net将在调用程序集中查找类型。

if (t.IsClass && !t.IsAbstract && t.GetInterface("mynamespace.IMyClass, MYDLL") != null)
{
     output.Add(Activator.CreateInstance(t));
}

但是,它更容易使用Type.IsAssignableFrom()

if (t.IsClass && !t.IsAbstract && typeof(IMyClass).IsAssignableFrom(t))
{
     output.Add(Activator.CreateInstance(t));
}