IEventAggregator を取得して、あるモジュールで公開してイベントを実行し、別のモジュールでキャッチできるようにしようとしています。以下のコードを単一のモジュール/プロジェクトで試してみましたが、うまく機能します。1 つのモジュール/プロジェクトでイベントを発行し、別のモジュール/プロジェクトでそれをサブスクライブした場合にのみ失敗します。
Unity を介して IEventAggregator を両方のモジュールに注入しました。
私には 3 つのプロジェクトがあり、そのうちの 2 つにはモジュール (A と B と呼びます) があり、1 つは単なるクラス ライブラリ (インターフェイスと呼びます) です。
クラス ライブラリInterfacesには、次のコードがあります。
public class RandomTestEvent : CompositePresentationEvent<string>
{
}
モジュールAには、ボタン クリック コマンドに次のコードがあります (これは実際にはプロジェクトのビュー モデルにあります)。
var evt2 = _eventAggregator.GetEvent<RandomTestEvent>();
evt2.Publish("Testing");
モジュールBには次のコードがあります。
public void Initialize()
{
var evt2 = _eventAggregator.GetEvent<RandomTestEvent>();
evt2.Subscribe(OnRandomThingDone);
}
private void OnRandomThingDone(string obj)
{
MessageBox.Show("Random Event Done With: " + obj);
}
トレースすると、Subscribe が呼び出されることがわかります。パブリッシュが呼び出されているのを見ると、デバッガーは言いますSubscriptions = 1
(サブスクリプションが作成されたことを認識しているため、IEventAggregator の 2 つの異なるインスタンスがないようです)。
ただし、発行後に OnRandomThingDone が呼び出されることはありません。
理由はありますか?(さらにコードを投稿する必要がありますか? その場合はお知らせください。)