Reflection C#CF2.0-系统激活器和内部类

Reflection C#CF2.0-系统激活器和内部类,reflection,compact-framework,c#-2.0,internal,activator,Reflection,Compact Framework,C# 2.0,Internal,Activator,我有一个包含实体集合的数据提供者。我只希望能够通过数据提供程序创建一个新实体 即,要创建新记录,我需要使用: Entity entity = Provider.AddNew(); enity.set_Properties... etc 我的问题是,如果我将实体设置为Internal,System.Activator将无法创建它们的实例。我的每个数据提供程序都使用一个基类,该基类具有传递的实体的泛型类型 因此,目前我的AddNew()方法包含以下内容: public T AddNew() {

我有一个包含实体集合的数据提供者。我只希望能够通过数据提供程序创建一个新实体

即,要创建新记录,我需要使用:

Entity entity = Provider.AddNew();
enity.set_Properties... etc
我的问题是,如果我将实体设置为Internal,System.Activator将无法创建它们的实例。我的每个数据提供程序都使用一个基类,该基类具有传递的实体的泛型类型

因此,目前我的AddNew()方法包含以下内容:

public T AddNew()
{
  T added = Activator.CreateInstance<T>();
  this.Collection.Add(added);
  return added;
}
public T AddNew()
{
T added=Activator.CreateInstance();
this.Collection.Add(已添加);
增加了退货;
}
如果我可以在数据提供者名称空间之外手动实例化一个新实体,这显然不是世界末日,但考虑到无法保存它们,这似乎毫无意义,那么为什么要给出这样做的选项呢


编辑:忘记提及我的所有提供者、实体等都在同一命名空间中。不要使用依赖公共构造函数的Activator。而是使用反射来查找无参数构造函数,然后调用它。大致如下:

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);