C#CF2.0 - System.Activator和内部类
-
23-08-2019 - |
题
我有一个包含实体的集合的数据提供者。我只希望能够通过数据提供程序创建一个新的实体。
即,以创建新的记录我需要使用:
Entity entity = Provider.AddNew();
enity.set_Properties... etc
我的问题是,如果我把我的实体内部,System.Activator不能创建它们的实例。我的每一个数据提供者的使用基类与通过的一般类型的实体。
因此,在此刻我的的AddNew()方法包含以下内容:
public T AddNew()
{
T added = Activator.CreateInstance<T>();
this.Collection.Add(added);
return added;
}
这显然不是世界的末日,如果我可以手动实例化一个新的实体数据提供者的名称空间之外,但似乎毫无意义的考虑有没有办法永远保存它们,那么为什么要给这样做的选项?
编辑:忘了提,我所有的供应商,实体等都是在同一个命名空间
。解决方案
不要使用激活,它依赖于公共构造函数。相反,使用反射来找到参数的构造函数,然后调用它。沿着这些线的东西:
Type t = typeof(MyType);
var parameterlessCtor = (from c in t.GetConstructors(
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
where c.GetParameters().Length == 0
select c).FirstOrDefault;
if(parameterlessCtor != null) instance = parameterlessCtor.Invoke(null);
不隶属于 StackOverflow