次のシナリオがあります。
A
私には3つのクラスがあり、それらを、、B
と呼びましょうC
。それらに共通しているのは、同じインターフェイスから継承し、ISomeInterface
EntityFrameworkを使用してエンティティにマップされるクラスであるということだけです。
このインターフェイスを実装するオブジェクトのリストを受け取ったメソッドがありますが、オブジェクト自体は、、またはのインスタンスにA
なりB
ますC
。
メソッドシェルは次のようになります
public void MyMethod(List<ISomeInterface> entityList)
{
foreach(var entity in entityList)
{
ProcessEntity(entity);
}
}
さて、問題はProcessEntity
メソッドにあります。これは一般的なメソッドであり、タイプまたはエンティティに応じてデータベースから一致する要素のテーブルを取得する必要があるため、次のようになります。
public void ProcessEntity<T>(T entity)
{
using( var repository = new DbRepository())
{
var set = repository.Set<T>();
...
}
}
問題は、この場合は実際のtype(、または)ではなく、行var set = repository.Set<T>();
が失敗することT
です。そのため、指定された型に関連付けることができない例外が発生します。これは理解できます。ISomeInterface
A
B
C
だから私の質問は:リスト内のオブジェクトの実際のタイプでProcessEntityを呼び出すにはどうすればよいですか?それらが実装するインターフェイスタイプではありません。