هل يمكنني استخدام ASP.NET الدورة [] متغير في DLL الخارجية

StackOverflow https://stackoverflow.com/questions/454187

سؤال

ولدي مشروعين، مشروع DLL التي لديها كل ما عندي من المنطق والوصول إلى البيانات الاشياء، ومشروع ASP.NET التي لا بلدي أشكال الخ.

وأنا في حيرة قليلا. فكرت لو أضفت مساحة الاسم إشارة System.Web إلى المشروع DLL سأكون قادرا على الرجوع إلى معلومات حالة الدورة من صفحة ASP.NET.

وكان يمكن استخدام كل صفحة للحصول على معلومات الدورة من وتمريرها إلى DLL لتجهيز ولكن أحب أن تكون قادرة على معالجة الأمور مباشرة من الدرجة DLL (ق).

هل هذا ممكن؟

ولقد مغشوش مع مساحة الاسم System.Web وفقط يبدو قادرا على الحصول على إشارة إلى متغير الدورة.

وبفضل جميع.

وجون

هل كانت مفيدة؟

المحلول

ويجب أن تكون قادرا على استخدام HttpContext.Current.Session

تحرير

وعلى الرغم نعم أنا أتفق يجب أن لا زوجين بإحكام بك DAL المنطق الأعمال أو غيرها التجميعات إلى جلسة ASP.Net. هناك الكثير من الحالات صالحة للوصول إلى سياق HTTP خارج مشروع على شبكة الإنترنت.

وعناصر ويب هو probally واحد من أفضل الأمثلة، وحدات قابلة لإعادة الاستخدام HTTP الخ الخ ...

والآن خيار واحد إذا كنت تريد أن يكون DLL الخاص بك سحب الاشياء من الدورة هو مجردة الدورة خارج. لذلك يمكن أن تحدد واجهة مثل IStorage، أن المكتبة سوف نعرف كيفية استخدامها. ثم يمكنك الحصول على الدرجة SessionStorage أو MemoryStorage واستخدام اللجنة الاولمبية الدولية لحقن الطبقة appropiate إلى طبقات مكتبتك. هذا يعطيك الحرية لرمز ذلك كيف أريد لها أن تكون مشفرة دون ربط التعليمات البرمجية لجلسة. يا والاستفادة احدة أخرى في حال القيام به بشكل صحيح يمكن أن تستخدم للا ربط التعليمات البرمجية لجلسة في شبكة الإنترنت أيضا.

نصائح أخرى

وطالما يتم تحميل الجمعية في نطاق الدورة، سيكون لديك الوصول.

وعلى الرغم من أن هذا النوع من اقتران ضيق لا ينصح حقا.

ويمكنك دائما استخدام HttpContext.Current.Session في DLL الخاص بك ولكن هذا يعتبر ممارسة سيئة. ومن شأن النهج الأفضل أن يكون لتمرير القيم المخزنة في القاموس الجلسة إلى DLL الخاص بك بدلا من ذلك الرجوع إلى الدورة. فائدة أخرى سوف تكسب أنت حسنات هي أن التعليمات البرمجية في DLL الخاص بك لن يكون مقرونا إلى وقت التشغيل ASP.NET هذا يعني أنه سيكون من الأسهل لاختبار.

وكما قال من قبل الآخرين، يمكنك دائما استخدام HttpContext.Current.Session في DLL الخاص بك، وأفترض أنه BAL، ولكن عليك أن تكون متأن حقا. ماذا لو يستهلك DLL في وقت لاحق من قبل خدمة ويندوز، أو بعض التطبيقات الأخرى التي ليس لديها HTTPContext؟ كلما فعلت هذا كان دائما في طريقة الحصول على الممتلكات حيث I التفاف محاولة للوصول HttpContext.Current.Session في كتلة حاول اللحاق وإذا كان أي شيء يذهب على نحو خاطئ I repull البيانات اللازمة من ديسيبل.

لا تستخدم HttpContext.Current.Session كما لن يتم تشغيل DLL الخاص بك دائما مع تطبيق ويب. قد تشغيل مع أي تطبيق آخر مثل ويندوز ومركز التجارة الدولية وحدة التحكم.

ومن الأفضل استخدام الأسلوب الذي استعرض actully معلمة، والتي سوف تأتي تشكل قيمة الدورة، إذا كنت تستخدم ASP.Net التطبيقات، وإلا لن يكون هناك أي تبعية التطبيق. إذا كان المشروع دلل الخاص بك وضعت بالفعل وتحاول تعديل منطق الأعمال exsiting ثم لا، لا تعديل طريقة الخاص exsiting، استخدام أسلوب الزائد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top