2009-05-20 6 views
0

エンティティのコレクションを含むデータプロバイダがあります。私は、データプロバイダを通じて新しいエンティティを作成できるようにしたいだけです。C#CF2.0 - System.ActivatorおよびInternalクラス

すなわち、私が使用する必要が新しいレコードを作成する:

Entity entity = Provider.AddNew(); 
enity.set_Properties... etc 

を私の問題は、私は内部に私のエンティティを設定した場合、System.Activatorは、それらのインスタンスを作成することができないということです。私の各データプロバイダは、渡されたエンティティのジェネリック型を持つBaseクラスを使用します。

ので、現時点では私のAddNew()メソッドには、次のものが含まれています

public T AddNew() 
{ 
    T added = Activator.CreateInstance<T>(); 
    this.Collection.Add(added); 
    return added; 
} 

私はデータプロバイダの名前空間の外に手動で新しいエンティティをインスタンス化することができればそれは明らかに世界の終わりではないのですが、それはそうです無意味なことを考えると、それを保存する方法がないので、なぜオプションを与えるのですか?

EDIT:私のすべてのプロバイダ、エンティティなどが同じ名前空間にあることを忘れてしまった。

答えて

0

パブリックコンストラクタに依存するアクティベータは使用しないでください。代わりに、リフレクションを使用してパラメータのないコンストラクタを見つけ、それを呼び出します。これらの線に沿ったもの:

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); 
関連する問題