0

エンティティのコレクションを含むデータ プロバイダーがあります。データ プロバイダーを介して新しいエンティティを作成できるようにしたいだけです。

つまり、新しいレコードを作成するには、次を使用する必要があります。

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

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

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

4

1 に答える 1

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);
于 2009-05-20T13:21:02.790 に答える