我有以下代码:
var type = typeof(PluginInterface.iMBDDXPluginInterface);
var types = AppDomain.CurrentDomain.GetAssemblies().ToList()
.SelectMany(s => s.GetTypes())
.Where(p => type.IsAssignableFrom(p));
Type t = types.ElementAt(0);
PluginInterface.iMBDDXPluginInterface instance = Activator.CreateInstance(t) as PluginInterface.iMBDDXPluginInterface;
TabPage tp = new TabPage();
tp = instance.pluginTabPage();
dll中的类实现了PluginInterface和上面代码中的Type,肯定是正确的类/类型,但是当我尝试通过接口创建实例时,我收到一条错误消息:
未分配给对象实例的对象引用。
有人知道为什么吗?
感谢。
答案 0 :(得分:3)
反正
TabPage tp = new TabPage();
tp = instance.pluginTabPage();
毫无意义。
执行:
TabPage tp = instance.pluginTabPage();
下一步也是这样做的:
Type type = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(s => s.GetTypes())
.FirstOrDefault(p => type.IsAssignableFrom(p));
if (type != null)
{
// create instance
}
或(我的首选方式):
from asm in AppDomain.CurrentDomain.GetAssemblies()
from type in asm.GetTypes()
where !type.IsInterface && !type.IsAbstract && typeof(ITarget).IsAssignableFrom(type)
select (ITarget)Activator.CreateInstance(type);
答案 1 :(得分:1)
尝试查看反射器中的类型。也许构造函数接受您没有正确传递给Activator.CreateInstance
的参数。