2009-05-20 28 views
0

我有一个包含实体集合的数据提供者。我只想通过数据提供者创建一个新的实体。C#CF2.0 - System.Activator和Internal类

即,创造了新的记录,我需要使用:

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

这显然不是世界的末日,如果我可以手动实例化一个新的实体数据提供者的名称空间之外,但似乎毫无意义,考虑到无法挽救他们,所以为什么选择这样做呢?

编辑:忘了提及所有我的提供者,实体等在同一个命名空间。

回答

0

请勿使用依赖公共构造函数的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); 
相关问题