2011-05-31 50 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