سلام دوستان
من پروژه ام را بصورت چندلایه نوشته ام.
لایه Web بنده در واقع مربوط به مدیریت Api هاست و در اونجا سیشن دارم که MemberID را می گیرم و تا اینجا هم مشکلی وجود ندارد.
مشکل انجایی است که من می خواهم در یک لایه دیگر مقدار MemberID را بگیرم و اینجا مقدار Session برابر null است!!!! یعنی به محض رفتن به یک لایه ی دیگر انگار سیشن اصلا مقدار نگرفته!!
من هم نمی خواهم که در کانستراکتور ورودی لایه، MemberID را پاس بدم!
حالا دستم به دامن همه تون!!!
چی کار کنم که بتونم سیشن را در لایه های دیگه پیدا کنم؟!؟!؟!؟!؟؟؟؟
سلام
چطوری دریافت میکتید ؟ باید از httpcontext بگیرید سشن رو تا مقدار داشته باشه
سلام بر ایمان عزیز ما
والا یک متد لاگین دارم در یک لایه که اطلاعات کاربر ورودی را می فرستم به اون و اطلاعات لازم را در System.Web.HttpContext.Current.Session می گذارم
ولی در لایه های دیگه اصلا بهش دسترسی ندارم یعنی مقدار ان را null بر می گرداند. کل پروژه ام داره بهم می ریزه!!!!
سلام
آقا اگه از onion استفاده کردی و domain و AppService و این داستانا داری پس حتما باید یه دیکشنری singleton برای caching استفاده کنی و session رو از اونجا بخونی.
(دیتابیس مناسب اینکار هم redis هستش که اگه معماریت توزیع شده نیست به کارت نمیاد.)
و هرجایی که session رو میخوای ISessionContext خودت رو به اون لایه پاس بدی و دیتای مورد نظر رو بکشی بیرون.
اگه هم غیر از این میخوای انجام بدی معماریت ایراد داره چون راه حلی رو که مختص وب هستش و چسبیده به لایه ASP.Net WebApi رو به صورت یک dependency محض پخش میکنی تو پروژه! که خب این کار هدف هیچ Clean Architecture نیستش.
سلام بر دوستان عزیزتر از جان
بله شما درست می فرمایید. الان که دارم با خواندن نوشته های شما بزرگواران بیشتر فکر می کنم می بینم من اصلا سشن را در لایه ی دیگر که اصلا http نیست ایجاد می کنم لذا نباید هم بشناسم.
لذا باید تغییر رویه بدم و اصلاحاتی انجام بدم.
ممنون از راهنمایی دوستان عزیز. پس از انجام مورد، حتمن در همین تاپیک، نتیجه را خدمت عزیزان اعلام خواهم کرد.
سلام مجدد بر دوستان
آقا نمی شود که نمی شود! گاهی دعا نکرده میشود ها!! اما این بار باز نشد.
من یه کم واضح تر خواسته ام را بگم برای اینکه دوستان راهنمایی داشته باشند
من توی لایه وب وقتی طرف لاگین کرد MemberID را می گیریم و داخل سشن می گذارم. حالا در یک لایه دیگه ریپوزیتوری دارم. و اونجا در تمام مدل هام باید آیدی فردی که مثلا رکورد را درج می کند هم ثبت کنم. می خوام دیگه هی مدام آیدی را پاس ندم و همونجا از سشن بخونم. یعنی توی لایه ریپوزیتوری از سشن MemberID را بخونم.
لطفا راهنمایی فرمایید
اینطوری اصل DIP نقض میشه خب امیر جان
باید حتما IPrincipal رو جابهجا کنی و توی IOC هم IPrincipal درخواست جاری رو پاس بدی.
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)