問題タブ [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のモジュールを大まかに参照して、存在できるようにする、または存在できないようにするにはどうすればよいですか?
このスタックオーバーフローの質問で、 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 つのサービスがあるため、それらに名前を付けてから、ビュー モデルにコンテナーから取得するサービスを何らかの方法で認識させる必要があることです。
私はおそらく設計ミスを犯したことを知っています。幸いなことに、修正する時間はありますが、修正方法がわかりません。
wpf - ItemsControl はビューを表示するのに、ContentControl は何も表示しないのはなぜですか?
Prism に基づくアプリケーションがあります。
これは私のシェルです:
MenuModuleで、ビューをリージョンに追加すると、問題なく表示されます。
問題は、シェルにItemsControlが必要ないことです。 ContentControl が必要ですが、 ContentControlを使用すると何も表示されません。
ItemsControl がビューを表示し、ContentControl が何も表示しないのはなぜですか?
c# - 2 つのキーと 1 つのオブジェクトを持つ最適な C# コレクションは何ですか?
各モジュールがメイン コンテンツにロードするキーと要素を追加できるMenuManagerクラスを用意しました。
したがって、顧客モジュールは次のようにビューを登録します。
そのため、後で特定のビューを前面に出すために、次のように言います。
デフォルトのビュー (最初に登録されたビュー) を取得するには、次のように言います。
そして、これはうまくいきます。
ただし、モジュール名とビュー名を区切るハイフンで「コード臭」をなくしたいので、以下のコマンドで登録したいと思います。
しかし、私の現在の辞書を置き換える最良の方法は何ですか。たとえば、頭に浮かぶのは次のとおりです。
Dictionary<string, string, object> (doesn't exist)
Dictionary<KeyValuePair<string,string>, object>
Dictionary<CUSTOM_STRUCT, object>
新しいコレクションは、これを実行できる必要があります。
- モジュールとビュー キーでビューを取得します (例: "customer"、"help" は 1 つのビューを返します)
- モジュール キーですべてのビューのコレクションを取得します (例: "customer" は 5 つのビューを返します)。
wpf - 複合 WPF (Prism) モジュール リソース データ テンプレート
シェル アプリケーションと、Microsoft CompoisteWPF (Prism v2) を使用したいくつかの個別のモジュール プロジェクトがあるとします。
コマンドを受け取ると、モジュールは新しい ViewModel を作成し、リージョン マネージャーを介してリージョンに追加します。
次に、モジュール内にリソース ディクショナリを作成し、データ テンプレートを設定して、読み込まれたビュー モデル タイプのビューを表示できると考えました (以下の xaml を参照)。しかし、ビュー モデルがビューに追加されると、ビュー モデルの名前空間が出力されるだけです。
編集:
App.xaml に追加することで動作させることができます
これは問題ありませんが、新しいモジュールが作成されると、App.xaml ファイルを追加する必要があることを意味します。私が探しているのは、モジュールをロードして Application.Resources に動的に追加する方法です。これは可能ですか?
prism - Composite WPF(Prism)では、複数のモジュールが「ツールバー」領域を共有できますか/共有する必要がありますか?
私はCompositeWPFを初めて使用し、シェルの基本的なアーキテクチャに苦労しています。
'OutlookStyleNav'、'Main'、'Toolbar'の3つの領域を持つシェルがあると仮定します。
ツールバー領域にボタンを追加するにはどうすればよいですか?
各モジュールは、この領域に独自のボタンを追加する必要がありますか?(もしそうなら、すべてのモジュールのボタンを同時に表示する方法は?)
シェルはコントローラー内のコマンドを動的に検出し、それに基づいてボタンを作成する必要がありますか?
わからない。助言がありますか?
wpf - Composite WPF (Prism) では、コントローラをどのように単体テストすればよいですか?
1 つのモジュールで基本的な複合 WPF シェルを構築しています。モジュールを単体テストしたいと思います。どうやら複合WPFは、単体テストが簡単になるようにコードをモジュール化します。
以下は、単体テストしたいコードです。それは私のモジュールのコントローラーにあります。リージョン、プレゼンター、モデルなどの標準の複合 WPF エンティティの使用に注意してください。
これは、単体テストしたいわずか 7 行のコードです。悪くない。問題は、それが多くの外部コンポーネント (RegionManager、View、PresentationModel など) に依存していることです。
これを個別にテストするために、外部コンポーネントをモックします。これらは、Unity コンテナーを使用してコンストラクター インジェクションを介してコントローラーに渡されます。これを構成して簡単なテストを行うために、単体テストは次のようになります...
(このメソッドの長さを見てください!もっと良いテスト方法があるはずです?複合 WPF は本当に私の人生を楽にしてくれますか?そして、すべてのテストでこれを行う必要がありますか?!)
クラスをテストするより良い方法はありますか? アドバイスをいただければ幸いです。
dependency-injection - Prism/Unity でビュー (UserControl) を自動的に解決するにはどうすればよいですか?
複合アプリケーション (Prism) でモジュールをロードすると、次のエラーが発生します。
{"現在のビルド操作 (ビルド キー Build Key[CustomersModul.ViewModels.CustomerAllViewModel, null]) が失敗しました: コンストラクター CustomersModul.ViewModels.CustomerAllViewModel(CustomersModul.Views.CustomerAllView ビュー) を呼び出そうとしたときに、パラメーター ビューを解決できませんでした。(戦略の種類 Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy、インデックス 2)"}
私はこのクラスを解決しています:
そして、そのクラスは次のようになります。
通常、コンストラクター パラメーターを持たないプレゼンターを解決し、それらのビューを内部でインスタンス化します。View をパラメーターとして受け入れるViewModelを使用するのはこれが初めてです。
興味深いことに、Resharperを使用してビューに移動すると、XAML またはコード ビハインドに移動するかどうかを尋ねられるので、おそらく Prism はどちらをインスタンス化するか混乱していますか?
Prism でこのビュー (XAML とコード ビハインドを使用した UserControl) をパラメーターで自動的にインスタンス化するにはどうすればよいですか?