5

私は 2 つのプロジェクトを持っています。すべてのロジックとデータ アクセスを含む DLL プロジェクトと、フォームなどを実行する ASP.NET プロジェクトです。

私は少し混乱しています。System.Web 名前空間の参照を DLL プロジェクトに追加すれば、ASP.NET ページのセッション状態情報を参照できると思いました。

各ページを使用してセッション情報を取得し、それを処理のために DLL に渡すことができますが、DLL クラスから直接処理できるようにしたいと考えています。

これは可能ですか?

System.Web 名前空間をいじりましたが、Session 変数への参照を取得できるようです。

皆さんありがとう。

ジョン

4

5 に答える 5

11

アセンブリがセッションのスコープにロードされている限り、アセンブリはアクセスできます。

このタイプの密結合は実際には推奨されませんが。

于 2009-01-17T22:27:09.720 に答える
10

HttpContext.Current.Sessionを使用できるはずです

編集

はい、同意しますが、BusinessLogicDALなどのアセンブリをASP.Netセッションに緊密に結合しないでください。Webプロジェクトの外部でHTTPコンテキストにアクセスするための有効なケースはたくさんあります。

Webコントロールは、おそらく最良の例の1つであり、再利用可能なHTTPモジュールなどです。

ここで、DLLにSessionからデータをプルさせたい場合の1つのオプションは、セッションを抽象化することです。したがって、ライブラリが使用方法を認識できるように、IStorageのようなインターフェイスを定義できます。次に、SessionStorageまたはMemoryStorageクラスを作成し、IoCを使用して適切なクラスをライブラリクラスに挿入できます。これにより、コードをSessionに結び付けることなく、コードを自由にコーディングできます。ああ、そして適切に行われた場合のもう1つの利点は、コードをWeb上のセッションに結び付けないようにするためにも使用できます。

于 2009-01-17T22:28:34.227 に答える
2

DLLではいつでもHttpContext.Current.Sessionを使用できますが、これは悪い習慣と見なされます。より良いアプローチは、セッションを参照するのではなく、セッションディクショナリに格納されている値をDLLに渡すことです。あなたが得るもう一つの利点は、DLL内のコードがASP.NETランタイムに結合されないことです。つまり、テストが簡単になります。

于 2009-01-17T22:34:34.620 に答える
2

他の人が言ったように、あなたはいつでもあなたのDLLでHttpContext.Current.Sessionを使うことができます、私はそれがあなたのBALであると思います、しかしあなたは本当に注意する必要があります。DLLが後でWindowsサービス、またはHTTPContextを持たない他のアプリによって消費された場合はどうなりますか?これを行うときはいつでも、プロパティgetメソッドにあり、HttpContext.Current.Sessionへのアクセスの試行をtry catchブロックでラップし、問題が発生した場合は、必要なデータをデータベースから再プルします。

于 2009-01-17T22:50:11.920 に答える
1

dll が Web アプリケーションで常に実行されるとは限らないため、HttpContext.Current.Session を使用しないでください。Windows、Console itc などの他のアプリケーションで実行できます。

ASP.Net アプリケーションを使用している場合は、セッション値から取得されるパラメーターを実際に受け入れるメソッドを使用することをお勧めします。それ以外の場合、アプリケーションの依存関係はありません。dll プロジェクトが既に開発されていて、既存のビジネス ロジックを変更しようとしている場合は、いいえ、既存のメソッドを変更しないでください。Overload メソッドを使用してください。

于 2013-04-10T06:43:50.183 に答える