2010-12-17 7 views
0

データ/ Webサービスで、複数のビューモデルが優先的な「MVVM方法」にアクセスする必要がある場合は、MVVMのビュー間での共有データサービス - グローバルまたはコンストラクタインジェクション?

私はグローバルな静的サービスを持っていますか、私のサービスのインスタンスをすべてのビューモデルに渡しますか?私は個人的には、あるアプローチの利点を他のものよりも見ることができません。

答えて

2

サービスのインターフェイスバージョンを渡すことで、クラスの単体テストを簡単に行うことができます。グローバルな静的状態では、これはクリーンでも簡単でもありません。

クラスをインタフェースにすることは、クラスのコントラクトも定義します。基本的には、「ClassAは、IServiceAとIServiceBが正しく機能することを要求しています。グローバルな静的状態では、そのような契約はありません。

+0

、私のおかげで理にかなっています。 – kbeal2k

0

依存性注入を使用することに加えて、サービスのインスタンスを渡さないと各ViewModelがServiceLocatorを呼び出して実行時に登録されたサービスのインスタンスを取得するというServiceLocaterアプローチも検討してください。

Fowler on DI and ServiceLocator

MSDN on ServiceLocator

+0

ServiceLocatorは、私の意見では、ひどいです。これは、各シナリオに多数の特定のサービスロケータがない限り、UnityContainerをすべてのクラスに渡すようなものです。コンストラクタインジェクションを使用して実行できるクラスのためのコントラクトを壊します。 –

関連する問題