Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dynamically load a type from an external assembly

Tags:

c#

reflection

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.

like image 258
Water Cooler v2 Avatar asked Mar 28 '10 18:03

Water Cooler v2


1 Answers

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.

like image 129
Petar Minchev Avatar answered Sep 21 '22 15:09

Petar Minchev