[英]Debugging constructor exceptions when using assembly.CreateInstance()
[英]InvalidCastException when creating an instance using assembly.CreateInstance
我正在寻找以下内容的解释-我正在使用的程序集正在加载
Assembly assembly = Assembly.LoadFrom(filename);
然后,我遍历程序集中的所有类型,并希望尝试找出某个类型是否实现了特定的接口,如果想要一个该类型的实例,我已经尝试了几种无效的方法,但是当我回到最基本的(可能是效率低下的)方式,我意识到还有一些我不了解的更基本的东西-
foreach (Type t in assembly.GetTypes())
{
foreach (Type i in t.GetInterfaces())
{
if (i.FullName == pluginInterfaceType.FullName)
{
object o = assembly.CreateInstance(t.ToString());
IInterface plugin = (IInterface)o;
尽管创建的类型确实实现了该接口,但最后一行仍导致InvalidCastException。
更进一步-如果我使用Activator.CreateInstance而不是Assembly.CreateInstance(我不想这样做),则强制转换为接口就可以了。
这很可能是因为您要投射到的接口与您在类中找到的接口不同。
或者是因为存在多个同名接口,或者是因为您加载了更多接口然后再加载一次。 例如,由于它是在程序集中定义的,因此您是动态加载的,然后尝试将其强制转换为静态绑定的程序集。
InvalidCastException
应该包含更多详细信息,例如“无法将x InvalidCastException
为y”。
我的猜测是,包含您要加载的IInterface
的程序集与您的代码所针对的程序集不完全相同,可能是非强名称程序集的本地副本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.