次のコードを取得しました
protected virtual void InternalChange(DomainEvent @event)
{
((dynamic) this).Apply(@event);
}
子オブジェクトは、いくつかのフィールドを介してイベントを処理するロジックを実装します。
protected Apply ( Message1 message)
{
}
protected Apply ( Message2 message)
{
}
ただし、これにより、アクセスできないというエラーが発生します。私は仮想を試しましたが、運がありませんでした。
何か案は ?..うまくいけば、この方法のように反射することなく。(例: http: //blogs.msdn.com/b/davidebb/archive/2010/01/18/use-c-4-0-dynamic-to-drastically-simplify-your-private-reflection-code.aspx)
詳細情報InternalChangeを子クラスに移動できますが、idは子にディスパッチを実行させません。
void Apply(AggregateRootHandlerThatMeetsConventionEvent domainEvent)
{
OnAggregateRootPrivateHandlerThatMeetsConventionCalled = true;
}
void Apply(AggregateRootPrivateHandlerThatMeetsConventionEvent domainEvent)
{
OnAggregateRootPrivateHandlerThatMeetsConventionCalled = true;
}
void Apply(AggregateRootProtectedHandlerThatMeetsConventionEvent domainEvent)
{
OnAggregateRootProtectedHandlerThatMeetsConventionCalled = true;
}
protected override void InternalChange(DomainEvent @event)
{
Apply(((dynamic)@event));
}
今のところ編集して、これを子で使用しています(そして親を抽象化しました)。これは機能しますが、その醜いIDは、実装者がディスパッチについて心配する必要はありません。
protected void Handle(DomainEvent message)
{
Handle ( (dynamic) message);
}