問題タブ [eventaggregator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
silverlight - 既存の Silverlight アプリにイベント集約を追加するにはどうすればよいですか?
Page.xaml にいくつかのボタンがあり、ユーザー コントロールを TransitioningContentControl コンテンツ ホストにロードする既存の Silverlight アプリケーションがあります。これらのユーザー コントロールはそれぞれビューモデルにバインドされています。1 つのユーザー コントロールに変更が加えられた場合、他のコントロールのデータを更新する必要がある場合があります。Prism でイベント アグリゲーターを使用することを検討していますが、すべてをシェルやモジュールなどに変換する必要はありません。Prism に行かずにイベント アグリゲーターを追加する方法はありますか?
multithreading - Prism EventAggregator をスレッド化のニーズに使用できますか?
私は Prism EventAggregator を見ていましたが、それは素晴らしいことです。私が最も懸念していたのは、スレッドを UI スレッドに正しくマーシャリングする機能でした。
この機能を使用して、BackgroundWorker と同様の方法でスレッドを作成するために使用できるクラスをモジュール開発者に提供できるかどうか疑問に思っていました。クラスのインターフェースは、
理解を深めるために、backgroundworker に似た型を保持しています。実装では、 taskstart および taskcomplete イベントを登録しています
MyTask クラスのコンストラクターで、完了が必要なスレッドを次のように取得します
ここでは、サブスクライブ中に取得したペイロードと同じトークンを持つペイロードがある場合にのみ、フィルター関数がイベントを返すフィルターに登録しています。
さらに私は使用します
このクラスは次のように使用できます。
このアプローチで得られる利点は 1 です。threadpool を使用するため、backgroundWorker のようにスレッドを作成するオーバーヘッドがありません。2. RunWorkerCompleted が UI スレッドで実行される場合の適切なスレッド マーシャリング。
eventaggregator を Threader として使用することが正しいかどうかアドバイスをお願いします。
c# - UIThread で Prism イベント アグリゲータ サブスクリプションをテストするにはどうすればよいですか?
PRISM イベント アグリゲーターを介してイベントをサブスクライブするクラスがあります。
hereに記載されているように、イベント アグリゲーターをモックするのはやや難しいため、実際のイベント アグリゲーターをインスタンス化して、テスト対象のシステムに渡します。
私のテストでは、そのアグリゲーターを介してイベントを公開し、テスト対象のシステムがそれにどのように反応するかを確認します。イベントは本番中に FileSystemWatcher によって発生するため、UIThread をサブスクライブして自動ディスパッチを利用したいので、イベントが発生したら UI を更新できます。
問題は、テスト中に、UIThread をサブスクライブしない限り、テスト中のシステムでイベントが認識されないことです。
TDD.Net 経由で VS2008 内から実行するテストに MSpec を使用しています。テストクラスに追加[RequiresSta]
しても役に立たなかった
私のテスト中に ThreadOption を変更することから私を救う解決策はありますか(たとえば、プロパティを介して - なんて醜いハック)???
castle-windsor - ウィンザー城:サービス開始時のカスタム処理
Windsor が型をインスタンス化するときにカスタム処理を実行することは可能ですか?
次のようなもの:
現在、IStartableを使用しています。「開始」コード (つまり、カスタム処理) は同一であるため、このロジックを各クラスから移動するとよいでしょう。
ありがとう!ブライアン
wpf - 永続的なサブスクライバーの動作を伴うWPF/SL EventAggregatorの実装?
現在、Silverlight 4 の最新の Prism を使用してアプリケーションを構築しています。モジュールがあり、そのモジュールにはビュー モデルを持つ 2 つのビューがあります。また、ビューごとに 2 つの領域を持つモジュール ビューもあります。モジュールの初期化では、ビューとビュー モデルを Unity コンテナーに登録し、ビューを対応するリージョンに登録します。問題は、ビューがテーブルの詳細情報に似たものを表示する必要があることです。最初のビューには利用可能なエンティティが表示され、2 番目のビューには選択されたエンティティの詳細が表示されます。
最初に選択したエンティティを渡す方法が必要です。新しく作成された最初のビューには選択されたエンティティがなく、新しく作成された 2 番目のビューには詳細が表示されません。
現在、私はこのようにしています:モジュールで2つのビューモデルを作成し、それらをインスタンスとしてUnityコンテナーに登録してから、ビューを対応する領域のタイプとして登録します。各ビューは、EventAggregator から EntitySelectedEvent をサブスクライブします。モジュール初期化子は、初期化後にこのイベントを発行します。このようにして、2 つのビューが同じエンティティを選択します。
私はこれが見苦しいことを知っています - ビューモデルの1つからこのイベントを公開しようとしましたが、問題はPrismのEventAggregatorが永続的なサブスクライバーをサポートしていないことです.それを起動すると、受信もイベントも行われません。これは EventAggregator の通常の動作であることはわかっていますが、ビュー モデルが初期化順序に依存せずにイベントを発生させることができる場合の解決策を探しています。つまり、最初のモデルが 2 番目のモデルが作成される前にイベントを発生させ、2 番目のモデルが発生する可能性があります。サブスクライブした後、この「キューに入れられた」イベントを受け取ります。
そのような動作をサポートする WPF/SL の他のメッセージング実装はありますか、またはメディエーター (私の例ではモジュール自体です) を使用することは結局それほど悪い考えではありませんか? メディエーターの大きな問題の 1 つは、モデルを初期化ですぐに作成する必要があり、モデルをコンテナーに型として登録できないことです。これは、再びサブスクライバーの欠落につながるためです。
wpf - EventAggregator、スレッドセーフですか?
これはスレッドセーフですか?
PrismのEventAggregatorは、メソッドが1つしかない非常に単純なクラスです。nullチェックの周りにロックがなく、private_eventsコレクションに追加する新しいタイプが作成されていることに気付いたときは驚きました。2つのスレッドが同じタイプに対して同時にGetEventを呼び出した場合(_eventsに存在する前)、これによりコレクションに2つのエントリが作成されるように見えます。
.net-3.5 - EventAggregators の SynchronizationContext の使用法を VB.Net に変換する
かなり大規模な VB.Net バック オフィスの winforms アプリケーションでの作業。100万以上のLOC。すべてのコードの 90% がフォームやその他の UI コントロールにある大きな泥だんご。
時間とリソースが許す限り、より良いアーキテクチャをゆっくりと導入し、Jeremy Miller による EventAggrgator のアイデアを使用してきました。
最初に、SynchronizationContext の使用を取り除きました。今、私はそれを紹介しようとしています.ラムダのものをc#からvb.netに変換するのに苦労しています。
具体的には、c#のこの行
これは私がこれまでに持っている vb.net です:
私が得ているエラーは
listener.Handle(message) <-- AddressOf オペランドはメソッドの名前でなければなりません。
私は単純なものを見逃していると確信していますが、これを2日間見つめた後、私は迷っています.
c# - アクションがラムダ式かどうかを確認するにはどうすればよいですか?
EventAgregator パターンを使用して、イベントをサブスクライブおよび公開しています。ユーザーがラムダ式を使用してイベントをサブスクライブする場合、弱参照ではなく強参照を使用する必要があります。そうしないと、パブリッシュが実行される前に式がガベージ コレクションされる可能性があります。
DelegateReference に簡単なチェックを追加して、プログラマーがラムダ式を渡し、弱い参照を使用している場合に引数の例外をスローするようにしたいと考えました。これは、コードを「監視」するのに役立ちます。
例:
何か案は?@delegate.Method.IsStatic を確認できると思いましたが、うまくいくとは思いません... (すべてのラムダ式は静的ですか?)
silverlight - EventAggregatorで重複するイベントを削除できますか?
正しく動作することができない非常に単純なシナリオがあります。CarViewとCarWindowView(子ウィンドウ)の2つのビューがあり、対応するViewModelがあります。私のCarViewには、Carオブジェクトフィールドを編集できるCarWindowView(子ウィンドウ)を開くEditButtonがあります。
私の問題は、CarWindowView ViewModelのDisplayModuleメソッドが何度も呼び出されていることです...最初に編集ボタンを押すと、1回呼び出され、2回目はtwineと呼ばれ、3回目は3回呼び出されます。だから砦...!
CarView ViewModelコンストラクター:
CarView ViewModel HandleEditCarBtnClickメソッド:
CarWindowView ViewModelコンストラクター:
CarWindowView ViewModel DisplayModuleメソッド(これは何度も呼び出されるメソッドです):
そのため、EventAggregatorで、[編集]ボタンのすべてのクリックではなく、1回のクリックだけを保存する方法を理解できません。これがうまく説明されていない場合は申し訳ありません!感謝します!
c# - EventAggregator で永続化をサポートするには?
Prism で EventAggregator を使用しており、イベントを永続化したいと考えています。つまり、クライアントが特定のイベントをサブスクライブすると、アグリゲーターはクライアントに見逃した以前のイベントを公開しました。これをサポートする方法はありますか?
これはメッセージ キューか何かのように聞こえます。しかし、システムはすでに EventAggregator と密接に結合しているため、このフレームワークを使用して、変更をあまり加えずにいくつかのイベントを選択的に永続化できるようにしたいと考えています。