我尝试编写一个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?
答案 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));
}