通过附属部件的反射创建对象
本文关键字:反射 创建对象 附属部 | 更新日期: 2023-09-27 17:58:06
我有两个以DLL作为输出的程序集/项目:模型和逻辑
在逻辑DLL中,我想通过反射创建一个特定模型的对象(该项目被引用,我可以手动创建一个实例)
MyNameSpace.Models.Foo foo = new MyNameSpace.Models.Foo(); // works
Type type = Type.GetType("MyNameSpace.Models.Foo"); // returns null
如何创建MyNameSpace.Models.Foo
的对象?显然,该类型无法解析。我该怎么解决这个问题?
您必须使用AssemblyQualifiedName。请参阅本文:http://msdn.microsoft.com/en-us/library/system.type.assemblyqualifiedname.aspx了解更多信息。
在你的情况下,类似于:
MyNamespace.Models.Foo, MyAssembly, Version=1.3.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089
如果您已对程序集进行签名,PublicKeyToken可能会更长。
如果您不确定,只需以通常的方式创建对象的实例,然后执行:
Type objType = typeof(System.Array);
// Print the full assembly name.
Console.WriteLine ("Full assembly name: {0}.", objType.Assembly.FullName.ToString());
// Print the qualified assembly name.
Console.WriteLine ("Qualified assembly name: {0}.", objType.AssemblyQualifiedName.ToString());
(无耻地从上述文章中剽窃)
您可以考虑使用Activator.CreateInstance
。例如:
Assembly assembly = Assembly.LoadFrom("Foo.dll");
Type type = assembly.GetType("TheNamspace.TheType");
object instanceOfMyType = Activator.CreateInstance(type);
Type.GetType参数是AssemblyQualifiedName:from MSDN