問題タブ [prism]
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.
wpf - Prism でモジュールをロードするこれら 2 つの方法の違いは何ですか?
Prismでモジュールをロードするこの方法の違いを誰でも説明できますか:
そしてこのように:
私はデモで両方の方法を見てきましたが、同じことをしていると言える限り、どちらも私のモジュールで必要なコンテナと regionManager を渡しているようです:
silverlight - Silverlight MVVM Prism と OpenFileDialog
現在、SilverLight 3 アプリケーションに取り組んでいます。MVVM パターンとプリズムを使用しています。次の項目を除いて、すべてが機能しています。私のビューの 1 つで、OpenFileDialog を使用する必要があります。ViewModel でこれを実行しようとしたのは、SilverLight のセキュリティ モデルがそれを禁止していることを確認するためだけでした。それ以来、OpenFileDialog コードをビューのコード ビハインドに移動しました。ここに私の問題があります。TwoWay に設定されたソースにバインドしていますが、ViewModel のプロパティのセッターにヒットしていません。
バインディングを使用したイメージ コントロールの例:
ユーザーが使用するボタン:
クリックイベント:
私のViewModelはINotifyPropertyChangedを実装しており、次のプロパティがあります。
セッターにブレークポイントを置いたら。それは決して当たらない。
wpf - モジュールがメニューにロードされる Prism の例を探しています
各モジュールが別のモジュール内のメニューのメニュー項目として自分自身を登録する Prism を使用した WPF コード例を知っている人はいますか?
(私は現在、EventAggregator でこれを実行しようとするアプリケーションを持っているため、1 つのモジュールが他のモジュールから発行されたイベントをリッスンし、そのタイトルをメニュー項目としてメニューに含める必要がありますが、順序に問題があります。読み込みやスレッド化などの例です。これを行うために古典的な Prism 構造を使用する例を見つけたいと思います。)
私はこれに関して次のように考えています。
Shell.xaml:
契約ビュー:
顧客ビュー:
しかし、Prism 以外の MVVM アプリケーション構造を作成したことがあり、メニューは常に ViewModel の ObservableCollections に適切にバインドされており、上記はこの素晴らしいパターンを破っているようです。上記は Prism で行う通常の方法ですか?
wpf - タイプは Prism のどこに登録されますか?
Prism Commanding_Desktop QuickStartソリューションでは、OrderModule で変数を次のように定義します。
しかし、コンテナから「解決」できるように、これはどこに登録されていますか? OrdersRepository が登録されている場所を以下に示しますが、OrdersEditorPresentationModelが登録されているプロジェクトの場所が見つかりません。
OrderModule.cs:
OrdersEditorPresentationModel.cs:
上記で解決されている型のコンストラクターには特定のシグネチャがありますが、このシグネチャはどこで定義されていますか:
デフォルトの署名である可能性があると思いますが、Prism ドキュメントの別の例では、プレゼンター コンストラクターには異なる署名があります。
wpf - Prismのresolve<>メソッドで起こっている魔法を誰かが説明できますか?
次のInitialize()メソッドを持つCustomersModule.csがあります。
コンテナから解決するクラスは次のようになります。
TestWhateverクラスは、私が作成した単なるダミークラスです。
それでも、私が登録したことがなくても、コンテナは問題なく解決 されます。また、コンテナはどういうわけかTestWhateverを見つけてインスタンス化し、に注入します。CustomersPresenterCustomersPresenter
コンテナが非常に自動であると明示的に述べているPrismのドキュメントのどこにも見つからなかったので、これに気付いて非常に驚きました。
ですから、これは素晴らしいことですが、私が知らないコンテナは他に何をしているのでしょうか。つまり、私が知らない他に何ができるのでしょうか。たとえば、他のモジュールからクラスを注入できますか?モジュールがロードされた場合、コンテナはそれらを注入し、そうでない場合はnullを注入しますか?
wpf - Prismのモジュールを大まかに参照して、存在できるようにする、または存在できないようにするにはどうすればよいですか?
このスタックオーバーフローの質問で、 Prism / Unityは思ったほど分離されていないことを学びました。たとえば、menuManagerをコンストラクターに注入するこのクラスがある場合、このクラスが実際にどこかに存在することを確認する必要があります(クラスを含む.dllをプルするだけで、コンテナがそれを処理します。たとえば、その場所にnullを挿入します):
しかし、私はそれに対処することができます:アプリケーションはMenuModuleなしでは実行できません(または、提案されたように、アプリケーションが壊れないようにするだけのNullMenuModuleを持つことができます)。
ただし、私が構築しているアプリケーションでは、MenuModuleにMenuManagerクラスがあり、すべてのモジュールは、メニューに必要なすべてのものをMenuManagerに登録する必要があります。ただし、 MenuModuleを交換できるようにしたいです。たとえば、InfragisticsMenuModuleとTelerikMenuModuleなどがあります。
ただし、CustomersModuleなどにいる場合、TelerikMenuModuleを使用するには、それを参照する必要があります。また、InfragisticsMenuModuleを使用する場合は、それを参照する必要があります。
では、すべてのモジュールを新しい参照で再コンパイルせずに、TelerikMenuModuleをInfragisticsMenuModuleと「ホットスワップ」するにはどうすればよいでしょうか。たとえば、これを置き換えたい場合は次のようになります。
これとともに:
アプリケーションを再起動するだけで、新しいInfragisticsMenuModule.dllで実行され、TelerikMenuModule.dllが存在しなくなったことを通知しません。
wpf - Prismで、タイプの代わりにインターフェイスをモジュールコンストラクターに注入するにはどうすればよいですか?
私のプリズムアプリケーションでは、タイプCustomerModule、キー\ "\"のインスタンスを取得しようとしたときに、アクティベーションエラーが発生しましたというエラーが表示されます。
これは、IMenuManagerタイプの「menuManager」を挿入しようとしている顧客モジュールが原因です。
ただし、CustomerModuleコンストラクターを変更して、インターフェイスではなく型を挿入すると、機能します。
では、MenuManagerをIMenuManagerの実装としてどこに登録する必要がありますか?CustomerModuleのInitializeメソッドに登録するには遅すぎるようです。
答え:
私はそれをConfigureContainer()に入れましたが、正常に機能しました。必ず「base.ConfigureContainer()」のままにしてください。
wpf - PrismのIContainerとIUnityContainerの違いは何ですか?
さまざまなソースから取得したコードを含むPrismプロジェクトがあり、すべてが非常にうまく機能していますが、一部のモジュールで注入していることに気付きました
そして他のモジュールでは私は注入します
IContainerにはコンポーネント、追加、および削除のみがあるようですが、IUnityContainerには数十のメソッドがあります。
IContainerをIUnityContainerに頻繁に変更して、後者のresolveメソッドを使用できるようにします。これら2つの違いは何ですか?なぜIContainerを使用したいのですか?
c# - MVVM、Prism、およびサービス ディスカバリ
MVVM パターンと Prism フレームワークを使用してアプリケーション (Silverlight と WPF) を作成しています。私のアプリケーションには、顧客のリストを含むグリッドがあります。その下に、顧客の詳細を表示するさまざまなビューがあります。すべての情報は、クエリからのデータと、データが受信されたときにイベントを発生させるコールバックを提供する WCF サービスから供給されます。グリッド内の選択項目が変更されると、詳細情報が更新されます。詳細情報の日付範囲を制御するフィルタリング ビューもあります。
同様の一連のビューを実装する必要もありますが、特定の顧客向けです。表示される情報は同じなので、同じビューとモデル クラスを再利用するのが最善であることは明らかです。
私が最初に考えたのは、両方のシナリオのモデルと WCF サービスの間に位置する別個の中間サービスを構築することでした。次に、インスタンスを名前で登録して、モデルを特定のサービスにバインドします。
残念ながら、これは、私が好む依存性注入に頼るのではなく、自分で多くのクラスをインスタンス化する必要があることを意味します。
では、MVVM の専門家にとって、Prism フレームワークの機能を最大限に活用し、コードの再利用を促進するには、ビュー、モデル、およびサービスをどのように構築すればよいのでしょうか?
どうもありがとう!
==== 編集: 次のテキストと例を追加 ====
これは、私が達成しようとしていることを説明する簡単な例です。
この顧客ビュー モデルは、顧客がグリッド内にある現在の設計に基づいています。顧客を選択すると SelectedCustomerChangedEvent が発生し、ビュー モデルが情報を要求します。
これは、コールバック メカニズムを使用してデータを提供する基になる WCF サービスから供給されます (データの取得/計算に時間がかかるため、単純な WCF 呼び出しは機能しません)。これはうまくいきます。問題は、現在選択されている顧客ではなく、特定の顧客に関する情報を表示するアプリケーションの別の領域で、この同じビューとモデルを再利用したいということです。
最初に考えたのは、リストの SelectedCustomerChangedEvent と、顧客固有のビューが開かれたときの同様のイベントを処理する中間サービスを作成することでした。次に、同じ CustomerInfoUpdatedEvent を通じてモデルにデータを提供します。
問題は、同じインターフェイスを実装する 2 つのサービスがあるため、それらに名前を付けてから、ビュー モデルにコンテナーから取得するサービスを何らかの方法で認識させる必要があることです。
私はおそらく設計ミスを犯したことを知っています。幸いなことに、修正する時間はありますが、修正方法がわかりません。