【发布时间】:2013-03-01 16:57:14
【问题描述】:
我遇到了一个特殊的问题。我正在开发一个动态工厂项目,我的目的是能够基于 XML 文件创建新对象。我的问题是这样的:
-
我有一个单独的项目,用于我所在工厂的基类
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与我希望它创建的 Items 位于同一个命名空间中,但基类位于另一个名称空间中。有没有办法解决这个问题?我试过把
Type.GetType()的参数改成typeof(T).ToString(),测试能不能找到,也没有找到。我无法创建从我的DynamicContent项目到我的主项目的链接,因为已经存在指向其他方式的链接。我觉得它甚至找不到它初始化的类的类型是愚蠢的。
所以我的问题是:解决这个问题的最佳方法是什么?我宁愿将我的DynamicContent 项目作为一个单独的库维护在一个单独的项目中,而不必将它包含在我的主项目中。有没有办法让它找到类,或者我必须为我想用它初始化的类型创建第三个项目,以便能够从主项目和 DynamicContent 项目中引用它?
BR,
-萨米人
【问题讨论】:
标签: c# reflection null project gettype