Don\'t ask me why but I need to do the following:
string ClassName = \"SomeClassName\";
object o = MagicallyCreateInstance(\"SomeClassName\");
Activator.CreateInstance(Type.GetType("SomeNamespace.SomeClassName"));
or
Activator.CreateInstance(null, "SomeNamespace.SomeClassName").Unwrap();
There are also overloads where you can specify constructor arguments.
Here's what the method may look like:
private static object MagicallyCreateInstance(string className)
{
var assembly = Assembly.GetExecutingAssembly();
var type = assembly.GetTypes()
.First(t => t.Name == className);
return Activator.CreateInstance(type);
}
The code above assumes that:
assembly
to whatever you need)Update:
Here's how to get all the classes that derive from a given class (and are defined in the same assembly):
private static IEnumerable<Type> GetDerivedTypesFor(Type baseType)
{
var assembly = Assembly.GetExecutingAssembly();
return assembly.GetTypes()
.Where(baseType.IsAssignableFrom)
.Where(t => baseType != t);
}