是否可以将类从外部(托管)程序集强制转换为特定接口?
我的意思是不要调用MethodInfo.Invoke(instance, parameters);
,而是要做类似的事情
Assembly assembly = Assembly.LoadFrom(assemblyName);
System.Type type = assembly.GetType(typeName);
Object o = Activator.CreateInstance(type);
IYourType yourObj = (o as IYourType);
更新
我有一个具有已知接口的外部程序集,是的,我有该程序集中引用的本地程序集的本地副本。检查表明o的类型为Assembly.GetType(typeName);
答案 0 :(得分:5)
好吧,我认为我们终于有足够的信息来回答这个问题。
问题是您已经创建了反射类使用的该接口的本地副本。
这将不起作用,抖动对两个接口的了解足够多,以至于它们都不相同,它返回null。
接口是2个实体之间的合同。您实际上要尝试做的就是欺骗.Net,以为它具有相同的合同,总之不会被欺骗
因为没有必要在程序集中反映接口(因为您在设计时不能使用它)。唯一可用的选项是在两个程序集之间共享该接口。这就是插件系统的工作方式。他们彼此之间足够了解,可以通过界面进行通信。