0

私は、文字通りすべてのオブジェクトが lastUpdatedBy プロパティを持つアプリケーションをここに持っています。ここに入力する情報は、session("username") 変数から取得したユーザーのユーザー名です。

このデータをクラス ライブラリの DAL に渡すにはどうすればよいですか?

最初は各メソッドに値を渡すだけでしたが、これはばかげていると思いました。メソッドが呼び出されるたびにそれを行う理由はないはずです。

それなら、DAL関連のクラスごとにコンストラクタに入れておけば、もっと楽になると思いました。

ただし、特定のページであっても、多数の New() 宣言があり、そのため、セッション ユーザー名を文字列としてキャストして渡す必要があるすべての行があります。

これを1か所でしか宣言できず、すべてがそれが何であるかを認識し、クラスライブラリのクラスに渡すことができるように、これを行うさらに効率的な方法はありますか?

4

3 に答える 3

1

それにはいくつかの方法があります。

1 つは、セッションから値を取得するクラスを用意することです。Session.Current.Username と同様に、Current はセッション インスタンスを返す静的プロパティであり、Username は Session の単純なプロパティです。

もう 1 つは、依存性注入を使用することです。コンストラクター (単純な値の代わりにできればクラス) にはまだ入力がありますが、自動的に挿入されるため、コードに明示的に渡す必要はありません。

于 2010-05-06T17:17:00.693 に答える
0

Thread.CurrentPrincipal私は通常、現在接続されているユーザーを確実に参照するための措置を講じます。これは、場合によっては自動的に行われます。

  • ASP.NET RoleManager を使用する ASP.NET アプリケーション

  • principalPermissionMode ="UseAspNetRoles" を使用する IIS でホストされる WCF サービス

それ以外の場合は、自分で行う必要がある場合があります (たとえば、WinForms アプリケーションでのアプリケーションの起動時)。

次に、DAL を使用Thread.CurrentPrincipal.Identity.Nameして現在のユーザーを識別することができます。

HttpSessionStateこれは、ASP.NET への依存を意味するを使用するよりもクリーンです。

于 2010-05-06T18:35:09.713 に答える
-1

AbstractDALObjectプロパティを含む抽象クラスを作成しstring Usernameます。すべての DAL クラスをこの抽象クラスから派生させ、DALFactoryこのプロパティを設定するクラスを作成してインスタンス化します。DALFactoryクラスに DAL の各タイプのメソッドを含めるか、リフレクションCreateXXXDALを使用して以下のようなジェネリック メソッドを作成することができます。

    private HttpSessionState m_Session = null; //set in constructor

    T CreateDAL<T>() where T : AbstractDALObject {
        Type t = typeof(T);

        //fetch a zero-param constructor 
        //you could change the argument types if you have a 
        //standard for the class
        ConstructorInfo ctor = t.GetConstructor(new Type[0]);

        T myDAL = (T) ctor.Invoke(new object[0]);
        myDAL.Username = m_Session ("Username");

        return myDAL;
    }
于 2010-05-06T17:29:56.997 に答える