使用字符串值创建新实例

我有几个类:SomeClass1,SomeClass2。

如何使用字符串中的类名创建其中一个类的新实例?

通常,我会这样做:

var someClass1 = new SomeClass1(); 

如何从以下创建此实例:

 var className = "SomeClass1"; 

我假设我应该使用Type.GetType()或其他东西,但我无法弄明白。

谢谢。

首先,您需要通过reflection获取类型,然后您可以使用Activator创建它。

要获取该类型,首先要确定它所在的程序集。对于运行代码的当前程序集,请参阅Assembly.GetExecutingAssembly() 。 对于当前AppDomain中加载的所有程序集,请参阅AppDomain.CurrentDomain.GetAssemblies() 。 否则,请参阅Assembly.LoadFrom

然后,如果您有一个类名但没有名称空间,则可以通过Assembly.GetTypes()枚举程序集中的类型。

最后,使用Activator.CreateInstance创建类型。

 using System; using System.Linq; using System.Reflection; namespace ReflectionTest { class Program { static void Main(string[] args) { Assembly thisAssembly = Assembly.GetExecutingAssembly(); Type typeToCreate = thisAssembly.GetTypes().Where(t => t.Name == "Program").First(); object myProgram = Activator.CreateInstance(typeToCreate); Console.WriteLine(myProgram.ToString()); } } } 
 Assembly assembly = Assembly.LoadFrom("SomeDll.dll"); var myinstance = assembly.CreateInstance("SomeNamespace.SomeClass1"); 

为什么不dependency injection框架? 这种类型的东西由Sprint.Net,Structure Map,NInject等dependency injection框架大大处理。