Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Casting Error with Reflection

I have an application that uses plugins that are managed via an interface I then dynamically load the plugin classes and cast them to the interface to work with them.

I have the following line of code, assume that IPlugin is my interface.

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

This should be pretty simple, create the instance and cast it to the interface. I know that the assembly and fully qualified name values are correct, but I am getting the following exception.

Exception= System.InvalidCastException: Unable to cast object of type ‘System.Runtime.Remoting.ObjectHandle’ to type ‘MyNamespace.Components.Integration.IPlugin’. at MyNamespace.Components.Integration.PluginProxy..ctor(Int32 instanceId)

Any ideas what could cause this?

like image 644
Mitchel Sellers Avatar asked Apr 13 '10 21:04

Mitchel Sellers


1 Answers

The exception indicates that you're getting an ObjectHandle, which suggests that your object is being marshaled and must be unwrapped.

Try the following

ObjectHandle marshaled_plugin = (ObjectHandle)Activator.CreateInstance(oInfo.Assembly,  Info.FullyQualifiedName);
IPlugin plugin = (IPlugin)marshaled_plugin.Unwrap();
like image 152
Jay Avatar answered Sep 26 '22 00:09

Jay