آشنایی با مفهوم میان افزار و سرویس در asp.net core

توسط: محسن درم بخت | منتشر شده در 1395/11/06 | بازدید : 11217 بار | زمان مطالعه : 12 دقیقه

آموزش ASP.NET Core

در مقاله های قبل با مفاهیم اولیه و مزایای asp.net core و هم چنین یکی از مهمترین کلاس ها در پروژه های asp.net core یعنی کلاس program.csآشنا شدیم. هم چنان که دیدیم یکی از تنظیمات مهم در این کلاس معرفی کلاسstartup است. این کلاس شامل دو متد اصلی است:
 
Configure:
 اگر فرض کنیم که یک درخواست HTTPاز لحظه ورود به وب سرور تا رسیدن به اپلیکیشن برای اجرا از یک مسیر یا یک دالان عبور می کند به این دالانpipelineگفته می شود. در asp.net استاندارد یعنی نسخه پیشین، یک درخواست HTTP یا همان request یا ماژول ها و handlerهای زیادی مواجه بود که چه بسا بسیاری از آنها به طور عمومی برای هر اپلیکیشن تحت وب اجرا می شد، چه به آنها واقعا نیاز باشد چه نباشد. در asp.net coreدرست عکس این قضیه وجود دارد. یعنی شما یک دالان خالی از ایستگاه دارید که باید توسط میان افزارها یا همان middlewareها این ایستگاه ها را برپا کنید. در واقع در asp.net core چیزی تحت عنوان httpmodule و httphandler نداریم و در عوض میان افزارها یا middleware ها وظیفه اعمال فیلتر و هدایت در خواست های HTTP را بر عهده دارند. میان افزار شباهت زیادی به httpmodule دارد و در واقع مانند فیلتری بر سر راه درخواست ها قرار میگیرد با این تفاوت که میتواند خارج از اپلیکیشن در جای دیگری هاست شده و به صورت پلاگین در مسیر request ها قرار گیرد. شکل زیر به طور مفهومی نحوه دخالت میان افزارها را نشان می دهد.
 
 
فایل Startup.cs را باز کرده و به متدConfigure دقت کنید.
هم چنان که مشاهده می کنید یکی از ورودی های این متد app از جنس IApplicationBuiler است . در بدنه این متد با عبارت  Use میان افزارها به  این app و در واقع به مسیر پردازش درخواست های HTTP افزوده می شوند. برای مثال متد UseStaticFiles موجب می شود میان افزاری در مسیر برای دریافت و پردازش فایل های استاتیک قرار گیرد یا UseMvc  به منظور فعالسازی الگوی mvcدر پروژه است. حال اگر شما بخواهید می توانید قبل از اینکه یک درخواست به هر یک از این میان افزارها برسد آن را در کنترل خود گرفته و به مسیری دیگری هدایت کنید( درست مثل دستور app.UseExceptionHandler در قسمت else عبارت شرطی بالا)؛ به این ترتیب می توان در بدنه این متد به تعداد دلخواه میان افزار برای توسعه قابلیت های اپلیکیشن حود بیفزایید. در مقالات بعدی از سلسله مقالات آموزش asp.net core به طور مفصل تر برخی از میان افزارهای کاربردی را در قالب پروژه مورد استفاده قرار خواهیم داد.  
 
ConfigureServices:
یکی از ویژگی های asp.net core پشتیبانی از تزریق وابستگی به صورت خودکار و پیش فرض است. تا قبل از این شما برای استفاده از الگوی تزریق وابستگی باید از یکی container های موجود مانند ninject، autofac یا simple injector استفاده می کردید. اما asp.net core از ابتدا بنای خود را به استفاده سرتاسری از این الگو در همه جای اپلیکیشن گذاشته است و توسعه دهندگان را به استفاده از این الگو تشویق می کند. مزایای اینکار مشخص است و در منابع بسیاری به طور مفصل بررسی شده است.
در متد ConfigureService باید تمام وابستگی ها تزریق شده و سرویس ها آماده سازی شوند. برای مثال فرض کنید سرویسی با نام اینترفیس IProductService نوشته اید. برای استفاده از این سرویس شما باید یک یا چند کلاس که آن را پیاده سازی کند، مثل کلاس ProductService ایجاد کنید. اما کار نمونه سازی از این کلاس برای استفاده نباید به صورت دستی انجام بگیرد بلکه در بدنه متد ConfigureServices مطابق تکه کد زیر این کار انجام میشود.
 
 این یعنی هر وقت به یک کلاس که اینترفیس  IProductService را پیاده سازی کند نیاز داشتم، به طور خودکار یک شئ از آن بساز و در اختیار من قرار بده. این مفهوم اگر برای شما خیلی آشنا نیست اشکالی ندارد‌. در مقاله بعد از سری مقالات آموزش asp.net core در مثال ها با آن بیشتر آشنا خواهید شد.
بنابراین این متد جایی برای آماده سازی سرویس ها برای استفاده در سرتاسر برنامه است. مثلا  در عبارت services.AddMvc در تکه کد بالا یعنی در بخش های مربوط به میان افزار mvc هرجایی به سرویس های مربوط به آن نیاز داشتم، اشیا و متدهای لازم را نمونه سازی و آماده کن.
دوره‌های آنلاین برنامه‌نویسی لیست دوره‌ها