2011-06-23 5 views
0

コントローラのアクションメソッドに、カスタムアプリケーションのユーザー情報を含む共通のクラスインスタンス(UserSessionInfoと呼ぶことができます)へのアクセスを提供する必要があります。インターフェイスとラッパー、カスタムモデルバインダー、またはコントローラに共通クラスを提供するActionFilter?

現時点では、httpセッションから直接ベースコントローラによって引き出されていますが、HTTPContextに依存するオブジェクトのすべての依存関係を削除して、コントローラをよりクリーンでテスト可能にしようとしています。

私の理解は、三つの可能な解決策があることで、

  1. コントローラのコンストラクタに各アクションメソッドにUserSessionInfoを提供する
  2. のActionFilterそれを注入します。
  3. 各アクションメソッドにUserSessionInfoを提供するためのIModelBinder実装。

私は感謝2と3

すべてのヘルプの違いを完全に理解するのに苦労1のまともな理解を持っています。

おかげで、

マット

答えて

3

ActionFiltersとModelBindersの最大の違いは、彼らが、彼らのカップリングおよび開発者の期待を行う傾けるものです。

modelBinderは、actionfilter の前に実行され、要求データをモデルにバインドします。 実行中のアクションはわかりません。 それは

バインディングプロセスに結合されているアクションフィルタはmodelbinder後のアクションとそのパラメータ のActionFilterのexeutesについて知っているとmodelbinderによって返さ データを変更することができます。実行中のアクションに結合されています

おそらく開発者の期待は大きな違いです。 ModelBindersは、比較的軽量の解析、オブジェクトの抽出および移入のみが想定されています。

ActionFiltersは特定の条件下で処理を行い、意思決定を行い、処理パイプラインに影響を与えることが予想されます。

これらの緩いガイドラインが便利です

関連する問題