我不得不實施一些問題的答案在這裏,因爲我試圖從不同的組件實例化對象有些困難(但在相同的解決方案)。所以我想我會發布我發現的工作。
首先,Activator.CreateInstance
方法有幾個重載。如果您只需撥打Activator.CreateInstance(Type.GetType("MyObj"))
,即假定該對象在當前程序集中定義,並返回MyObj
。
如果你把它作爲在這裏的答案推薦:Activator.CreateInstance(string AssemblyName, string FullyQualifiedObjectName)
,那麼它,而不是返回一個ObjectHandle
,你需要調用它的Unwrap()
讓你的對象。當嘗試調用另一個程序集中定義的方法時,此重載很有用(順便說一下,您可以在當前程序集中使用此重載,只需將參數AssemblyName
保留爲空)。
現在,我發現上面的建議使用typeof(ParentNamespace.ChildNamespace.MyObject).AssemblyQualifiedName
爲AssemblyName
實際上給了我錯誤,我無法讓它工作。我會得到System.IO.FileLoadException
(無法加載文件或程序集...)。
我沒去工作如下:
var container = Activator.CreateInstance(@"AssemblyName",@"ParentNamespace.ChildNamespace.MyObject");
MyObject obj = (MyObject)container.Unwrap();
obj.DoStuff();
爲什麼你需要一個字符串實例化類?根據你的情況,可能會有「更清潔」的解決方案,特別是如果你不願意使用反射。 – 2010-02-11 21:28:04
@SylvestreEquy但是也許在別人的情況下,這只是解決方案...... SO上的問題不僅僅爲那些問他們的人提供服務。 – 2014-11-12 17:42:06