2012-03-27 50 views
0

我有一個包含兩個項目的解決方案。 首先讓我描述一下我的場景。 項目1:擁有一個基類調用MyBaseClass 以下兩個屬性和方法,我很感興趣:Activator.CreateInstance與繼承類不在同一個項目中

TypeToLoad - 靜態字符串屬性,它的繼承類簡單的get/set功能來實例化。

實例 - 靜態屬性,它返回TypeToLoad與下面的代碼行中指定的類型的MyBaseClass實例:

public static MyBaseClass Instance{ 
    return (MyBaseClass)Activator.CreateInstance(Type.typeof(TypeToLoad)); 
} 

現在在第二個項目我繼承MyBaseClass如下(當然,正確的命名空間和引用已被添加)。

public class MyInheritClass : MyBaseClass { 
    //implements all other functions of MyBaseClass; 
} 

和我的其他代碼文件中的一個,在同一個項目的MyInheritClass,我有以下幾行代碼:

Type myType = Type.typeof("MyInheritClass"); //returns the correct "Type" 
MyBaseClass.TypeToLoad = "MyInheritClass"; 
MyBaseClass myInstance = MyBaseClass.Instance; //Errors... because Type.typeof(...) could not resolve "MyInheritClass". 

當我移動MyInheritClass代碼文件到同一項目作爲MyBaseClass的代碼運行得很好。

我的問題是,是否有無論如何通過設置MyBaseClass.TypeToLoad =「MyInheritClass」使用MyBaseClass.Instance創建MyInheritClass的實例,而無需在同一個項目中使用這兩個類(MyBaseClass在基本DLL類庫中,並且另一個項目中的MyInheritClass引用MyBaseclass DLL庫)?

我試圖尋找反射激活劑,但無法找到我正在尋找的東西。也許我不知道這個正確的術語。

+1

順便說一句,你應該使用像[tag:.net]或[tag:c#]這樣的描述性標籤。如果你這樣做,你很可能會很快得到答案。 – svick 2012-03-27 01:17:00

回答

2

假設你實際上意味着Type.GetType()(而不是Type.typeof(),這將不會編譯),那麼它清楚地記錄爲做你正在觀察什麼:

類型的裝配合格的名稱獲取。 [...]如果類型位於當前正在執行的程序集或Mscorlib.dll中,則只需提供由其名稱空間限定的類型名即可。

它還解釋瞭如何解決它:將程序集的名稱添加到類型名稱。所以,如果你的類型被稱爲MyInheritClass,它在MyNamespace命名空間和MyAssembly組件(通常是相同的項目名稱),你可以在類型名稱設置爲

MyNamespace.MyInheritClass, MyAssembly 

,它應該工作。

另外,您應該避免使用字符串作爲類型名稱,使用實際的Type對象更安全。 TypeToLoad應該是Type類型,而不是string

或者,也許你不應該使用這樣的設計。我不知道你爲什麼要這樣做,但我很肯定有一個更好的解決方案,不涉及在這樣的基類上設置靜態字段。 (當你有兩種實現相同基類的類型時會發生什麼?)

+0

嗨svick,你是絕對正確的關於我鍵入Type.TypeOf()而不是Type.GetType()的錯誤。 – NPToita 2012-03-27 03:20:24

+0

我朝這個方向前進的目的是因爲我有一組提供者,這些提供者將是我的基礎/核心,具有默認功能。對於我擁有的每個客戶端,我都會根據需要繼承這些提供程序,並在必要時覆蓋其虛擬方法,並在配置文件中將提供程序類型指向正確的客戶提供程序類。而且我不想將所有客戶都集中到同一個程序集中,因爲讓客戶A的庫也包含客戶B的代碼是沒有意義的。 – NPToita 2012-03-27 03:30:43

+0

想象一下,如果客戶端的數量達到100以上,那麼管理代碼集就會非常糟糕。 通過直接進入,它使我能夠在各自的項目上分別開發每個客戶端提供程序,並將該DLL轉儲到其客戶端應用程序中,並將提供程序指向客戶端類。 與會員提供商類似的東西。 謝謝您的解決方案/建議。我一定會嘗試一下,並會給予反饋。我很漂亮的身體其他也有我遇到的同樣的問題。 非常感謝。 Thinh P. Nguyen – NPToita 2012-03-27 03:30:55