GetInterface总是返回null



我尝试编写一个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?

您需要限定类型名称。默认情况下,.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));
}

相关内容

  • 没有找到相关文章

最新更新