我遇到了一個奇怪的問題。我正在開發一個動態工廠項目,我的目的是能夠基於XML文件創建新的對象。我的問題是這樣的:項目之間的Type.GetType()可見性問題(Visual C#)
我有一個單獨的項目爲工廠的基類,我有
public abstract class DynamicContentFactory<T, Params> where T: class where Params: DynamicParameters
在這個抽象類我有一個靜態方法
Create
如下public static T Create(Params data)
Params
只包括一個字符串作爲默認稱爲Type
。我想限制對象相同的命名空間的基類T
的創作,所以我做了以下內容:string namespaceStr = typeof(T).ToString(); namespaceStr = namespaceStr.Substring(0, namespaceStr.LastIndexOf('.') + 1); Type type = Type.GetType(namespaceStr + data.Type);
在我的主要項目中,我有一個具體的工廠類
public class ItemFactory : DynamicContent.DynamicContentFactory<ItemFactory, ItemParameters> { }
問題是當我撥打
ItemFactory.Create
時,Type.GetType
返回null
。ItemFactory
與我希望它創建的項目駐留在同一個命名空間中,但基類駐留在另一個命名空間中。有沒有辦法解決?我試過將
Type.GetType()
的參數更改爲typeof(T).ToString()
,以測試它是否能找到它,也沒有找到它。我無法創建從我的DynamicContent
項目到我的主項目的鏈接,因爲已經存在另一種方式的鏈接。我覺得這是愚蠢的,它甚至不能找到它在初始化類的類型
所以我的問題是:什麼是去解決這個問題的最好方法?我寧願將我的DynamicContent
項目作爲單獨的庫保存在單獨的項目中,而不是將其包含在我的主項目中。有沒有辦法讓它找到這些類,還是必須爲我想要使用它初始化的類型創建第三個項目,以便能夠從主項目和DynamicContent
項目中引用它?
BR,
-Sami你正在觀察
謝謝!這澄清了一點點。我通過調用Assembly.GetCallingAssembly()。GetType()來設法解決這個問題。我想這樣做會很糟糕,因爲我們無法保證CallingAssembly包含T. – 2013-03-13 16:37:26
不要忘記命名空間的其他一些功能,例如解決名稱相同的類型之間的歧義等。 – Charleh 2013-03-13 16:38:54