が、この:
........
.ExposeConfiguration(c => c.EventListeners.PreUpdateEventListeners = new IPreUpdateEventListener[] {new AuditEventListener()});
は次のようになります。
.ExposeConfiguration(c => c.AppendListeners(ListenerType.PreUpdate, new object[]
{
new AuditEventListener()
});
私は(別の答えに記載されている)「SetListener」メソッドはまた、以前のすべてのリスナーを削除すると考えています。
private void AddListenerToConfiguration<T>(FluentConfiguration config, params ListenerType[] typesForListener)
where T : class
{
var listener = Activator.CreateInstance<T>();
config.ExposeConfiguration(x =>
{
foreach (var listenerType in typesForListener)
{
x.AppendListeners(listenerType, new T[]
{
listener
});
}
});
}
をしてから、このような何かを呼び出す:
あなたが何かにもう少し動的である場合は、この操作を行うことができ、あなたが見ている間、
AddListenerToConfiguration<AuditEventListener>(smFactory,
ListenerType.PreUpdate);
これは、クリーンなコードを可能にFluentの設定また、1つのタイプを複数のリスナータイプに簡単に登録することもできます。私はデフォルトのリスナーの実装から継承し、オーバーライドされたメソッドにbase.METHODNAMEを呼び出すか、デフォルトのリスナーと同じ動作を複製し、リスナーがない限り
デフォルトのリスナーを除去するためとして、私はそれらを削除しません。
このコードには十分注意してください。自分自身をリストに追加するのではなく、実際には既存のイベントリスナーを削除しています。 FluentNH(バージョンマッピングを使用)でオプティミスティックロックを使用しようとすると、いくつかのイベントリスナーが自動的に登録され、提供されたコードによってそれらが削除されるため、機能しません。 –
OK、訂正:間違ったリスナーを監査のために上書きしていました。しかし、私の質問は残っています:ExoseConfigurationを呼び出すときに既存のリスナーを削除できると仮定するのは賢明でしょうか? –