2017-05-18 4 views
0

私は、Prismライブラリとシェル/モジュールアーキテクチャに適しているような比較的複雑なモジュラーアプリケーションを持っています。いくつかのビューで使用されるプリズム単一インスタンスviewmodel

私は、次の可能性にハングアップだ:

私のアプリケーションは、この例のために、私はRS232経由レーザーに接続したい、多くの物理デバイスに接続します。私は、Connect、GetHeight、SendCommand、Disconnectなど、レーザーが実行するためのほんの一握りのメソッドしか必要としません。だから、これはすべてレーザークラスで定義されるべきです。

今、LaserModuleには、アプリケーション全体に広がる複数のビューが必要です。 1つのビューは常にGetHeightを使用してレーザーをポーリングして値を表示し、別のビューは単一のGetHeightを実行し、結果をダイアログに表示する単純なボタンです。別のビューは、(他のモジュールビューの中で)リストビュー領域に追加される別のボタンでもかまいません。クリックすると、LaserModuleの設定ビューに移動します。

これで、LaserModuleごとに1つのレーザークラスのインスタンスが作成できるのは、RS232ポートに1回しか接続できないためです。また、多くの機能が異なるビュー間で共有されているため、すべてのビューが同じ(単一インスタンス)ViewModelを共有すると思います。

これは意味がありますか?私は多くの地域を持っていますが、これらの地域で前後のビューを入れ替えたので、各ビュー/ビューモデルの1つのインスタンス以上を作成することは決してありません。

最後に、アプリケーションは、物理的に接続された各レーザーの複数のLaserModuleを処理できる必要があります(ただし、それぞれ個別の単一インスタンスビュー/ ViewModelのセットを持ちます)。

任意の洞察力が大幅に高く評価され、この絵は私が何をしようとしているおおよそまとめ:Laser Views

答えて

0

あなたはレーザーサービスを持っていますし、それはシングルトンとしてコンテナに登録されます。その後、ViewModelはサービスを使用します。シングルトンViewModelを持つようにはしないでください。それはトラブルを求めています。

+0

ブライアン、私のLaserModuleの初期化の中で、レーザークラスの登録を行うのがいいかもしれませんか?私のアプリケーションで2/3/4 +レーザーが必要な場合、初期化中にforeachループでレーザークラスの登録を行うのがベストプラクティスですか?あるいは、2/3/4th/+ LaserModuleを追加するのは意味があり、それぞれに独自のシングルトンレーザーがありますか?あるいは両方が可能なので、その決定は完全に些細なものですか? – z0nghits

関連する問題