クラスを疎結合するために Prism の EventAggregator が提供する機能がとても気に入っています。しかし、今 EventAggregator でカバーされていない問題があります。
それで、私がメッセージ「テスト」を発行し、現時点でこのメッセージのサブスクライバーがいないと仮定しましょう。サブスクライバーが存在するまで延期することは可能ですか?
よろしく
クラスを疎結合するために Prism の EventAggregator が提供する機能がとても気に入っています。しかし、今 EventAggregator でカバーされていない問題があります。
それで、私がメッセージ「テスト」を発行し、現時点でこのメッセージのサブスクライバーがいないと仮定しましょう。サブスクライバーが存在するまで延期することは可能ですか?
よろしく
これは簡単に実装できます。後で発行される 2 番目のメッセージと、メッセージとタイマーを含むクラスを定義します。
public class OriginalMessage : CompositePresentationEvent<OriginalArgs> { }
public class MyDelayedMessage : CompositePresentationEvent<MyEventArgs> { }
public class DelayedMessage {
EventAggregator _bus;
OriginalMessage _msg;
DispatcherTimer _timer;
OriginalArgs _args;
public DelayedMessage(
EventAggregator bus,
OriginalMessage sourceMessage,
OriginalArgs args,
TimeSpan delay
) {
_bus = bus;
_args = args;
_msg = sourceMessage;
_timer = new DispatcherTimer();
_timer.Interval = delay;
_timer.Tick += OnTimerTick;
}
void OnTimerTick(object sender, EventArgs args) {
_bus.GetEvent<MyDelayedMessage>().Publish(_args);
}
}
このオブジェクトを保持するには、コンテキストが必要です。プライベート フィールドとしてホスト IU コンテナーにドロップできます。