2011-05-31 65 views
1

我有DLL作为输出两个组件/项目:模型和逻辑从卫星组件创建经由反射物体

内部的逻辑DLL我想通过反射来创建一个特定模型的对象(该项目是引用,我可以手动创建一个实例)

MyNameSpace.Models.Foo foo = new MyNameSpace.Models.Foo(); // works 
Type type = Type.GetType("MyNameSpace.Models.Foo"); // returns null 

如何创建的MyNameSpace.Models.Foo对象?显然这个类型没有解决。我怎样才能解决这个问题?

回答

1

你可以看看使用Activator.CreateInstance。例如:

Assembly assembly = Assembly.LoadFrom("Foo.dll"); 

Type type = assembly.GetType("TheNamspace.TheType"); 

object instanceOfMyType = Activator.CreateInstance(type); 
2

您将不得不使用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 

如果你已经签署程序集的公钥可能会更长。

如果你不知道,只是创建对象的常用方法的一个实例,然后执行:

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()); 

(无耻地从上述文章缺口)

0

Type.GetType说法是AssemblyQualifiedName:从MSDN