tags:

views:

55

answers:

1

From managed code, how do I load a managed type from another assembly at runtime, assuming the calling code does not have a static reference to the assembly?

To clarify, let's say I have class Lib in Lib.cs compiled into Lib.dll. I want to write a class Foo in a separate assembly called Foo.dll, that does not have a reference to Lib.dll statically, but instead loads Lib.dll and then reflects on for the presence of the class Lib and then calls a method on it.

Sorry for such an obvious question on Reflection. I figure it'll take much lesser time to get the answer on a forum that to read a few articles.

+3  A: 

Here is a short snippet:

Assembly assembly = Assembly.LoadFile("Lib.dll");
ILib lib = (ILib)assembly.CreateInstance("Lib");
lib.doSomething();

Of course the Lib class must implement the ILib interface which must be accessible both from Foo.dll and Lib.dll. This way you achieve abstraction.

Petar Minchev
Thank you, Petar. That's a good enough start for me.I'm firming up my thoughts on a design and I haven't decided yet whether I want the caller to have the contract or to use MethodInfo[] to reflect on the vtable of the called object.Thanks again.
Water Cooler v2
You are welcome:)
Petar Minchev