*喜 我将一些dll文件附加到我的程序中,并将这些名称设置为menustrip的项目。我想点击这些项目时自动运行dll。所以,这些dll文件实现了一个接口dll! 为什么在调试中实例的值为null? * 请帮助我
foreach (var file in Directory.GetFiles(@"F:\tamrin\calcut\calcut\bin\Debug\plugin\", "*.dll"))
{
try
{
s = file.ToString();
var asm = Assembly.LoadFrom(file.ToString());
foreach (Type type in asm.GetTypes())
{
object a = new object();
a = (object)asm;
if (type.ToString() != "ICalculate.IC")
{
string[] b = type.ToString().Split('.');
menu.Items.Add(b[0]);
var instanc = Activator.CreateInstance(type) as IC;
int r = instanc.GetResult(2, 4);
}
}
}
catch (Exception ex)
{
string[] s2 = s.Split('\\');
MessageBox.Show(s2[7] + " is NOT dll file");
}
答案 0 :(得分:1)
type.ToString() != "ICalculate.IC"
将整理所有不属于接口ICalculate.IC
的类型。这可能不是你想要的。即使您将if子句更改为==
,它也只会匹配确切的类型。
如果要匹配实施IC
的类型,请使用
if (typeof(IC).IsAssignableFrom(type) && type.IsClass && !type.IsAbstract)
另请注意,Activator.CreateInstance
仅在有问题的类具有不带参数的构造函数(默认构造函数)时才有效。