2011-12-07 1 views
3

ログインしてライセンス情報を取得するためにWebサービスに依存するWPFのデスクトップアプリケーションを開発しています。これは、ユーザがログインして、ライセンスとログイン日などのクライアント側(デスクトップアプリケーション内)のオブジェクトを構築することを意味します。依存性注入(DI)の最善のアプローチ

私はStructureMapを使用していて、IMyUserの実装をViewModelsコンストラクタ)。私の質問は、私は自分のIMyUserの実装をコンストラクタに渡す場合、私は私の構造マップの初期化を置く必要がありますか?

私はログインしてIMyUserObjectを作成した後に思っています。私はStructureMapを設定し、それに私のユーザオブジェクトのインスタンスを渡すことができます。これは私のアプリケーションではやや「遅い」(普通は私のアプリケーションクラスに入れているので、アプリケーション内の最初のものとして実行されます)。

これは、IMyUserとDIを活用する適切な方法ではない場合は、アドバイスをお願いします。また、別のご相談をいただければ幸いです。

答えて

4

これは承認に関する質問ですので、カスタムIPrincipalの実装で処理する方がはるかに良いと思います。

アプリケーションが起動すると、実装をThread.CurrentPrincipalに割り当てます。この初期インスタンスは、ユーザーを認証すべきではありません。

ユーザーがログインしてライセンス情報を受け取ったら、Thread.CurrentPrincipalを置き換えたり更新して、ユーザーにアプリケーションの使用を許可します。

これは、Ambient Contextパターンの例です。この相互作用にStructureMapを関与させる必要はありません。

+0

乾杯、あなたが救助にポップアップしてくれることを望んでいました:-) カスタムIPrincipalを実装するのが面倒です。 –