我有一个应用程序,它使用通过接口管理的插件,然后动态加载插件类,并将它们转换到接口以与它们一起工作。
我有下面一行代码,假设iplugin是我的接口。

IPlugin _plugin = (IPlugin)Activator.CreateInstance(oInfo.Assembly, oInfo.FullyQualifiedName)

这应该很简单,创建实例并将其转换到接口。我知道程序集和完全限定名值是正确的,但是我得到了以下异常。
例外情况=
System.InvalidCastException:无法
类型的强制转换对象
'系统.运行时.远程处理.对象句柄'
键入
“mynamespace.components.integration.iplugin”。

mynamespace.components.integration.pluginproxy..ctor(int32
实例ID)
你知道是什么引起的吗?

最佳答案

异常表示您得到了一个ObjectHandle,这表明您的对象正在被封送处理,必须被解开。
尝试以下操作

ObjectHandle marshaled_plugin = (ObjectHandle)Activator.CreateInstance(oInfo.Assembly,  Info.FullyQualifiedName);
IPlugin plugin = (IPlugin)marshaled_plugin.Unwrap();

09-10 01:43