そのようなオープンジェネリック型パラメーターのデリゲートインスタンスを持つ方法はありますか?
Action<T> SomethingHappened;
コンパイラがエラーを出します。
私は2年ごとにこの質問をして忘れていたかもしれません。以前の同様の質問が見つからないので、とにかく質問しています。
私が本当にやろうとしているのはこれです:
Entity Frameworkでは、テーブルに新しい行が追加されたり、テーブルの既存の行のデータが変更されたりするたびに、関心のあるリスナーにそのようなものがあることを伝えることができるパブリッシャーの一般的なフレームワークを作成したいと思います。起こりました。
たとえば、パブリッシャーは、Customerテーブルへの新しい行の追加またはCustomerテーブルの変更について知りたいと思っているすべてのリスナーに通知する場合があります。
リスナーはロガー、メール送信者などです。
現在、私がしているのは応急修理ですが、よりタイプセーフなソリューションが必要です。これが私が現在行っていることです:
public partial class DaEntities : ObjectContext
{
Action<object, ObjectStateEntry> EntityModified;
Action<object, ObjectStateEntry> EntityDeleted;
Action<object, ObjectStateEntry> EntityAdded;
public override int SaveChanges(SaveOptions options)
{
var modifiedEntities =
ObjectStateManager.GetObjectStateEntries(
System.Data.EntityState.Added | System.Data.EntityState.Modified);
var deletedEntities =
ObjectStateManager.GetObjectStateEntries(
System.Data.EntityState.Deleted);
foreach (var entry in modifiedEntities)
{
var type = GetObjectType(entry.GetType());
// fire delegates here
}
return base.SaveChanges(options);
}
}
上記のシナリオでは、次のようなものが必要です。
public static Action<T, ObjectStateEntry> EntityModified;
public static Action<T, ObjectStateEntry> EntityDeleted;
public static Action<T, ObjectStateEntry> EntityAdded;
そして、次のような一般的な方法を指し示すようにします。
public void SomethingHappenedToAnEntity<T, ObjectStateEntry>
(T t, ObjectStateEntry e)
{
// do stuff here
}