آشنایی با StartUp در Asp.Net Mvc Core
- 1399/6/23
- 1165
- برنامه نویسی
بخش ششم
در مقاله قبلی به کلاس Global در webform پرداختیم. ابتدای این مقاله باید به این مورد اشاره کنم که در نسل بعدی asp.net همین کلاس برای asp mvc هم به کار گرفته شده است.
دقیقا با همان شیوه کاری و کدنویسی در بخش شروع و پایان رویدادها یا بخش نگهداری موقت رویداد در زمان مشخص هم برای این نسل دوباره تکرار شده است.
دقت داشته باشید در این کلاس رویدادهای مختلفی قابلیت تعریف شدن دارد که در این مقاله نمیگنجد و نیاز به دوره های عملی می باشد. پس برای شروع و آشنایی با این کلاس و ویژگی هایش در همین حد برای این مقاله ما بسنده میکنیم.
و اما بحث نسل جدید یعنی mvc core . در این نسل اوضاع دگرگون و شرایط تغییر میکند. کلاس عمومی Global در این نسل دیگر وجود ندارد.
پس سوالی مطرح میشود که چگونه رویداد هایی مثل خطا یا مسیریابی ها تعریف میشوند؟ پاسخ سوال در کلاس جدیدی است که در این نسخه ارائه شده است.
کلاس Startup
در این کلاس دو قسمت تعریف شده است. اما قبل از باز کردن این مبحث گفتن این نکته لازم است که در دو نسل قبلی در کنار کلاس Global یک فایل کانفیگ هم وجود دارد که ترکیب این دو مورد در نسل سوم Startup را بوجود می آورد. پس در مقاله بعدی ما بحث وب کانفیگ را در دو نسل قبلی را بررسی میکنیم.
و اما گفتیم Startup از دو قسمت تشکیل شده است. یک بخش برای کانفیگ و یک بخش برای سرویس های کانفیگ. این دو بخش هرکدام کار مجزای خود را انجام میدهد. کانفیگ برای تعریف ویژگی ها به کار میرود.
مثلا در این بخش مسیر دهی باید معرفی شود.
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
دقت کنید در اینجا از ویژگی mvc بهرمند شده است چون گفتیم که این نسل درنبال روی نسل قبلی خودش است اما در اینجا صراحتا مسیر دهی مشخص و قابل تغییر و تفکیک است. در حالی که در نسل های قبلی به صورت پیش فرض این مورد وجود ندارد.
اگر در کد بالا دقت کنید مشاهده میکنید در ابتدا برای شروع با app درخواست خود را اعلام کرده است. این مورد به کلاس پیش فرضی برای فراخوانی ویژگی ها در کانفیگ برمی گردد.
کلاس IApplicationBuilder این کلاس به صورت ضمنی در دل کانفیگ فراخوانی و ویژگی های لازم بر اساس آن تعریف و فراخوانی میشود.
public void Configure(IApplicationBuilder app)
{
}
در کد بالا مشاهده میکنید یک متد بدون خروجی بنام کانفیگ تعریف شده است و خاصیت کلاس IApplicationBuilder در آن تعریف و نامش app قرار داده شده است. پس در کانفیگ خاصیت ها و رویداد ها با آن صدا زده خواهند شد.
مثلا:
app.UseExceptionHandler("/Home/Error");
برای کنترل خطا و هدایت کاربر به صفحه خطای مشخص در صورت بروز خطا به روش بالا در کانفیگ باید عمل کنیم.
یا در صورت استفاده از ویژگی های Identity برای دسترسی کاربر و همچنین session می توانیم به روش زیر فراخوانی را انجام دهیم.
app.UseStaticFiles();
app.UseIdentity();
و اما بخش دوم این کلاس که به قسمت سرویس ها بر میگردد به چه صورت می باشد.
تنظیمات سرویس ها در این کلاس رخ میدهد با متد ConfigureServices.این متد هم مانند متد کانفیگ خروجی ندارد و هر رویدادی که قرار است مورد استفاده قرار گیرد در این متد باید فراخوانی شود.
public void ConfigureServices(IServiceCollection services)
{
}
کلاس IServiceCollection نگهدانده رویداد های لازم می باشد که باتوجه به نیاز وب سایت باید این رویداد ها مورد استفاده قرار گیرد.
مثلا رویدادی برای استفاده از ویژگی های mvc نیاز است. در کانفیگ مسیر دهی را برای این مورد استفاده کردیم اما اینجا باید خود mvc را فراخوانی کنیم تا رویداد ها به درستی صورت گیرد.
services.AddMvc();
services که نام کلاس IServiceCollection می باشد در این کلاس ویژگی AddMvc را فراخوانی کرده ایم.
یا مثلا قصد داریم از ویژگی های ارسال پیامک یا ایمیل استفاده کنیم پس باید سرویس های مورد نظر را فراخوانی کنیم.
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>();
در کد بالا این دو مورد را که به صورت سرویس هستند در کانفیگ سرویس درخواست داده ایم.
پس این دو متد در این کلاس رویداد هایی مثل خطا یا مسیردهی و ... یا ویژگی ها و سرویس ها را مورد استفاده قرار می دهد. یک کلاس ترکیبی و بهینه شده که در این نسل مورد استفاده قرار گرفته.
در پایان این مورد را اشاره بکنم که بحث ارتباط دهی با پایگاه داده هم در این کلاس انجام میشود که در مقاله بعدی در کنار کانفیگ نسل های قبلی مورد بررسی قرار خواهد گرفت.
پایان بخش ششم