質問

私は、エンティティのコレクションが含まれているデータプロバイダを持っています。私は、データプロバイダを介して新しいエンティティを作成することができるようにしたい。

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

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

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

編集:すべての私のプロバイダなどのエンティティは、同じ名前空間にあることを言及するのを忘れた

役に立ちましたか?

解決

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

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);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top