مرجع تخصصی برنامه نویسان

بزرگترین انجمن برنامه نویسان فارسی زبان

استفاده از Session در لایه های دیگر پروژه

دوشنبه, 09 اردیبهشت 1398 14:43

استفاده از Session در لایه های دیگر پروژه

سلام دوستان

من پروژه ام را بصورت چندلایه نوشته ام.

لایه Web  بنده در واقع مربوط به مدیریت Api  هاست و در اونجا سیشن دارم که MemberID  را می گیرم و تا اینجا هم مشکلی وجود ندارد.

مشکل انجایی است که من می خواهم در یک لایه دیگر مقدار MemberID  را بگیرم و اینجا مقدار Session  برابر null  است!!!! یعنی به محض رفتن به یک لایه ی دیگر انگار سیشن اصلا مقدار نگرفته!!

من هم نمی خواهم که در کانستراکتور ورودی لایه، MemberID  را پاس بدم!

حالا دستم به دامن همه تون!!!

چی کار کنم که بتونم سیشن را در لایه های دیگه پیدا کنم؟!؟!؟!؟!؟؟؟؟

دوشنبه, 09 اردیبهشت 1398 20:36

سلام 

چطوری دریافت میکتید ؟ باید از httpcontext بگیرید سشن رو تا مقدار داشته باشه

ﺳﻪ شنبه, 10 اردیبهشت 1398 07:42

سلام بر ایمان عزیز ما

والا یک متد لاگین دارم در یک لایه که اطلاعات کاربر ورودی را می فرستم به اون و اطلاعات لازم را در System.Web.HttpContext.Current.Session می گذارم

ولی در لایه های دیگه اصلا بهش دسترسی ندارم یعنی مقدار ان را null  بر می گرداند. کل پروژه ام داره بهم می ریزه!!!!

ﺳﻪ شنبه, 10 اردیبهشت 1398 08:13
از چه الگویی استفاده کردید که لاگین در یک لایه دیگه است ؟ اینکار صحیح نیست ، لاگین باید در لایه خود وب باشه چون در وب مورد استفاده است مگر معماری SOA باشه
ﺳﻪ شنبه, 10 اردیبهشت 1398 14:42

سلام

آقا اگه از onion استفاده کردی و domain و AppService و این داستانا داری پس حتما باید یه دیکشنری singleton برای caching استفاده کنی و session رو از اونجا بخونی.

(دیتابیس مناسب اینکار هم redis هستش که اگه معماریت توزیع شده نیست به کارت نمیاد.)

و هرجایی که session رو میخوای ISessionContext خودت رو به اون لایه پاس بدی و دیتای مورد نظر رو بکشی بیرون.

اگه هم غیر از این میخوای انجام بدی معماریت ایراد داره چون راه حلی رو که مختص وب هستش و چسبیده به لایه ASP.Net WebApi رو به صورت یک dependency محض پخش میکنی تو پروژه! که خب این کار هدف هیچ Clean Architecture نیستش.

چهارشنبه, 11 اردیبهشت 1398 07:40

سلام بر دوستان عزیزتر از جان

بله شما درست می فرمایید. الان که دارم با خواندن نوشته های شما بزرگواران بیشتر فکر می کنم می بینم من اصلا سشن را در لایه ی دیگر که اصلا http  نیست ایجاد می کنم لذا نباید هم بشناسم.

لذا باید تغییر رویه بدم و اصلاحاتی انجام بدم.

ممنون از راهنمایی دوستان عزیز. پس از انجام مورد، حتمن در همین تاپیک، نتیجه را خدمت عزیزان اعلام خواهم کرد.

چهارشنبه, 11 اردیبهشت 1398 11:24

سلام مجدد بر دوستان

آقا نمی شود که نمی شود! گاهی دعا نکرده میشود ها!! اما این بار باز نشد.

من یه کم واضح تر خواسته ام را بگم برای اینکه دوستان راهنمایی داشته باشند

من توی لایه وب وقتی طرف لاگین کرد MemberID  را می گیریم و داخل سشن می گذارم. حالا در یک لایه دیگه ریپوزیتوری دارم. و اونجا در تمام مدل هام باید آیدی فردی که مثلا رکورد را درج می کند هم ثبت کنم.  می خوام دیگه هی مدام آیدی را پاس ندم و همونجا از سشن بخونم. یعنی توی لایه ریپوزیتوری از سشن MemberID  را بخونم.

لطفا راهنمایی فرمایید

پنج شنبه, 12 اردیبهشت 1398 19:59

اینطوری اصل DIP نقض میشه خب امیر جان

باید حتما IPrincipal رو جابه‌جا کنی و توی IOC هم IPrincipal درخواست جاری رو پاس بدی.

ارسال پاسخ برای این تاپیک

ارسال پاسخ مخصوص اعضا سایت می باشد ! میتوانید با حساب کاربری خود وارد سایت شده یا ثبت نام کنید