gil
gil

Reputation: 2298

Creating an object without knowing the class name at design time

Using reflection, I need to investigate a user DLL and create an object of a class in it.

What is the simple way of doing it?

Upvotes: 7

Views: 15907

Answers (5)

Martin Marconcini
Martin Marconcini

Reputation: 27226

As it has already been said, you need to poke the System.Reflection namespace.

If you know in advance the location/name of the DLL you want to load, you need to iterate through the Assembly.GetTypes().

In Pseudocode it would look something like this:

Create and assembly object.

Iterate through all the types contained in the assembly.

Once you find the one you are looking for, invoke it (CreateInstance)…

Use it wisely.

;)

I have plenty of Reflection code if you want to take a look around, but the task is really simple and there are at least a dozen of articles with samples out there in the wild. (Aka Google). Despite that, the MSDN is your friend for Reflection Reference.

Upvotes: 1

samjudson
samjudson

Reputation: 56853

System.Reflection.Assembly is the class you will want to use. It contains many method for iterating over the types contained with a user DLL. You can iterate through each class, perhaps see if it inherits from a particular interface etc.

http://msdn.microsoft.com/en-us/library/system.reflection.assembly_members.aspx

Investigate Assembly.GetTypes() method for getting the list of types, or Assembly.GetExportedTypes() for the public ones only.

Upvotes: 3

Mark Ingram
Mark Ingram

Reputation: 73595

Take a look at these links:

http://www.java2s.com/Code/CSharp/Development-Class/Createanobjectusingreflection.htm

http://msdn.microsoft.com/en-us/library/k3a58006.aspx

You basically use reflection to load an assembly, then find a type you're interested in. Once you have the type, you can ask to find it's constructors or other methods / properties. Once you have the constructor, you can invoke it. Easy!

Upvotes: 1

Nir
Nir

Reputation: 29584

You can create an instance of a class from a Type object using Activator.CreateInstance, to get all types in a dll you can use Assembly.GetTypes

Upvotes: 1

jfs
jfs

Reputation: 16748

Try Activator.CreateInstance.

Upvotes: 15

Related Questions