繁体   English   中英

使用assembly.CreateInstance创建实例时,InvalidCastException

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM