2011-09-02 5 views
0

JOlivers CommonDomainとEventStoreをNServiceBusとしてテストしています。JOlivers CommonDomainとEventStoreでeventとしてのinterfaceを使用する方法は?

private void Apply(IPhoneNumberChanged phoneNumberChangedEvent) 
{ 
    this.Number = phoneNumberChangedEvent.Number; 
} 

残念ながら、これは動作しません。後で私はこのハンドラを持って、その後

RaiseEvent(bus.CreateInstance<IPhoneNumberChanged>(m => { m.Number = number; })); 

そして:私はこのような私の集計でイベントを発生させる必要があります。私は例外が発生します: "CommonDomain.Core.HandlerForDomainEventNotFoundException: 'Phone'タイプの集合体が 'IPhoneNumberChanged'タイプのイベントを発生させましたが、ハンドラがメッセージを処理するために見つかりませんでした。"

ここでの問題は、純粋な具象クラスで動作するため、 "bus.CreateInstance"から作成されたオブジェクトです。しかし私はインターフェイスとして私のイベントが必要です。これは解決できますか?

編集:ちょうど注 - 私はオブジェクトを作成するために "bus.CreateInstance"を使用する必要はありません、それは私が現在 'IPhoneNumberChanged'を上げる必要がある最も簡単な(唯一の)方法です。他の方法でも大丈夫です - 私はハンドラの引数としてインターフェイスを持っている限り。お使いの携帯電話の集計のために、あなたのコンストラクタで

答えて

2

、単純に次の行を追加します。例外の世話をします

this.Register<IPhoneNumberChanged>(this.Apply); 

。 CommonDomain内部のデフォルト内部ルーティング機構は、リフレクションを使用せずに、適切なHandleメソッドにイベントを取得する方法を理解するよりも、登録ベースのルータです。別のルータが書かれており、すでにCommonDomainプロジェクトに参加しています。これはリフレクションを使用しており、より多くのコンベンションに基づいています。

あなたのイベント名について簡単に考えてください。電話番号が変更されたというよりも、と表示され、電話番号が変更されたが必要な場合があります。ドメインの観点からは、なぜ何かがいつもより興味深く重要です。通常、電話番号が変更されたということは興味深いものではありません。その人が自分の口座を動かしたり取り消したりしたために変更されたという事実は興味深いものであり、重要でもある可能性が高い。

+0

こんにちはジョナサン、残念ながらそれは動作しません。私はそれをデバッグし、名前は同じですが(IPhoneNumberChanged)型はありません。 Bus.CreateInstanceから構築された型は "MyDomain .__ Impl.IPhoneNumberChanged"であり、登録された型は "MyDomain.IPhoneNumberChanged"です。また、「MyDomain__Impl.IPhoneNumberChanged」は実行時に作成されるため、CommonDomainに登録することはできません。どんなアドバイスですか? – Werner

+0

"this.Register(Type、action)"は基本的に私が探しているものだと思いますか?または、別の解決策がありますか? – Werner

+0

第2の考えでは、最後のコメントを忘れてしまいます。このような登録は、イベントオブジェクトが作成されるたびに行われなければならない。 – Werner

関連する問題