0

現在、セッション データの取得と設定に使用するコントローラーに挿入する型があります。

_sessionData.Usernameを使用するのではなく、関連するセッション情報を取得できるように、これを使用しSession["username"]ます。

このセッション情報をすべてのビューで使用したいのですが、以前は、SessionData クラスをコントローラーに挿入する代わりに、SessionData メンバーを静的にすることでこれを行っていました。

静的メンバーの使用を避けたいだけでなく、各コントローラーのビューにオブジェクトを渡す必要もありません。

このタイプのシナリオに最適なパターンはどれですか? この同じ問題を解決するために何をしますか?

4

2 に答える 2

0

依存性注入はここであなたを助けます。依存性注入フレームワークを取得して、MVCアプリケーションと統合します。たとえば、NinjectをMVCアプリケーションに統合するには、このブログ投稿を参照してください。

DIフレームワークをアプリケーションと統合したら。SessionDataクラスをDIフレームワークに登録します。シナリオに基づいて、SessionDataクラスの有効な有効期間を選択してください。これらのDIフレームワークを見ると、呼び出しごと、セッションごと、シングルトンなど、複数のライフタイム構成が提供されます。

次に、必要な場所にSessionData依存関係を挿入します。コントローラの場合、この依存関係を含むBaseControllerを次のようなパブリックプロパティとして作成できます。

[Inject]
public SessionData SessionContext {get;set;}

ビュー部分については、強く型付けされたモデルを渡すことを検討する必要があります。プロセスはここでも同様です。BaseModelを作成し、ここにSessionDataプロパティを保持すると、DIフレームワークが残りを実行する必要があります。ここでの最後のステップは、レンダリングされた各ビューにこのモデルを渡すことです。

于 2012-04-09T11:55:17.077 に答える
0

Session ["username"]を使用しないのはなぜですか?次のようなインスタンスで静的呼び出しをラップできます。

public class MySessionClass
{
    public string GetSessionValue(String value)
    {
        return Session[value];
    }
}

インスタンスのメンテナンスと柔軟性が得られ、Sessionクラスを何度も書き直すことなく、テストでモックすることができます。

アップデート

ビューでインスタンスを使用する限り、コードブロックを記述し、それを更新して使用することを妨げているのは何ですか?MVCの他のコードナゲットと同じように、それに対してコードを記述できるはずです。ただし、アーキテクチャを階層化する目的が損なわれるため、これを行うことはお勧めしません。HTMLページの場合と同じように、セッションに直接アクセスすることも、コントローラーからオブジェクトとしてセッションに渡すこともできます。

于 2012-04-09T11:03:41.687 に答える