آموزش تزریق وابستگی در ASP.NET Core
آموزش تزریق وابستگی در ASP.NET Core یکی دیگر از آموزش های گروه آموزشی پرووید می باشد که در این قسمت آن را به شما معرفی می کنیم. این بسته آموزشی نیز یکی از دوره های آموزشی دیگر که در حوزه ی فارسی سازی آموزش های انگلیسی تنظیم شده است می باشد. عنوان این بسته آموزشی آموزش تزریق وابستگی و یا Dependency Injection در ASP.NET Core است که با نام اصلی Dependency Injection in ASP.NET Core از شرکت Pluralsight منتشر شده است.
تزریق وابستگی به کنترلرها در ASP.NET Core
کنترلرهای ASP.NET Core MVC وابستگی ها را به صراحت از طریق constructor ها درخواست می کنند.

ASP.NET Core دارای پشتیبانی داخلی برای تزریق وابستگی (DI) است. DI تست و نگهداری برنامه ها را آسان تر می کند.
تزریق سازنده (Constructor Injection)
سرویس ها اغلب به عنوان پارامتر تابع سازنده اضافه می شوند و سیستم runtime این سرویس ها را از درون service container تشخیص می دهد.

سرویس ها معمولاً با استفاده از interface ها تعریف می شوند. برای مثال، اپلیکیشنی را در نظر بگیرید که به زمان فعلی نیاز دارد. Interface زیر سرویس IDateTime را نشان می دهد:
public interface IDateTime {
DateTime Now {
get;
}
}
کد زیر interface مربوط به IDateTime را پیاده سازی می کند:
public class SystemDateTime: IDateTime {
public DateTime Now {
get {
return DateTime.Now;
}
}
}
سرویس را به service containe اضافه کنید:
public void ConfigureServices(IServiceCollection services) {
services.AddSingleton < IDateTime, SystemDateTime > ();
services.AddControllersWithViews();
}
کد زیر بر اساس ساعتی از روز یک تبریک به کاربر نمایش می دهد:
public class HomeController: Controller {
private readonly IDateTime _dateTime;
public HomeController(IDateTime dateTime) {
_dateTime = dateTime;
}
public IActionResult Index() {
var serverTime = _dateTime.Now;
if (serverTime.Hour < 12) {
ViewData["Message"] = "It's morning here - Good Morning!";
} else if (serverTime.Hour < 17) {
ViewData["Message"] = "It's afternoon here - Good Afternoon!";
} else {
ViewData["Message"] = "It's evening here - Good Evening!";
}
return View();
}
برنامه را اجرا کنید و یک پیام بر اساس زمان نمایش داده می شود.
ثبت سرویسها و مدیریت طول عمر آنها در ASP.NET Core
در ASP.NET Core، ثبت سرویسها مشخص میکند Container داخلی برنامه چگونه وابستگیهای موردنیاز را ایجاد و ارائه کند. آموزش Dependency Injection in ASP.NET Core ابتدا ثبت یک سرویس را بررسی میکند و سپس به Service Descriptorها و جایگزینی یا حذف Registrationها میپردازد. این مباحث برای زمانی کاربرد دارند که یک پیادهسازی باید با پیادهسازی دیگری جایگزین شود یا تنظیمات سرویسها در طول توسعه تغییر کند. همچنین آشنایی با Transient Serviceها کمک میکند تفاوت رفتار سرویسها از نظر طول عمر را در طراحی برنامه در نظر بگیرید و نحوه ایجاد نمونهها را بهتر مدیریت کنید.
انتخاب Lifetime تنها یک تنظیم ساده نیست؛ وابستگی میان سرویسهایی با طول عمر متفاوت میتواند رفتار ناخواستهای ایجاد کند. به همین دلیل، آموزش موضوع جلوگیری از Captive Dependencyها را پوشش میدهد. این مسئله زمانی مطرح میشود که یک سرویس با عمر طولانیتر، وابستگیای با عمر کوتاهتر را در خود نگه دارد و عملاً طول عمر آن را تحت تأثیر قرار دهد. بررسی این موارد به توسعهدهنده کمک میکند ثبت سرویسها را بر اساس مسئولیت و الگوی استفاده آنها انجام دهد. برای کسانی که برنامههای ASP.NET Core را توسعه میدهند، درک این قواعد میتواند از خطاهای طراحی مرتبط با چرخه عمر سرویسها جلوگیری کند.
پیادهسازی Factory و سازماندهی Registrationها با Extension Method
همه سرویسها را نمیتوان صرفاً با ثبت مستقیم یک نوع و استفاده از Constructor ایجاد کرد؛ گاهی ساخت نمونه به منطق یا اطلاعات بیشتری نیاز دارد. این آموزش Implementation Factoryها را بررسی میکند و نشان میدهد چگونه میتوان هنگام ثبت سرویس، شیوه ساخت آن را مشخص کرد. این قابلیت زمانی کاربرد دارد که ایجاد یک وابستگی به تنظیمات یا سرویسهای دیگر وابسته باشد. در کنار آن، موضوع کدنویسی با Interfaceها به طراحی قراردادهایی کمک میکند که مصرفکنندگان سرویس به آنها وابسته باشند، نه به جزئیات یک پیادهسازی مشخص.
با افزایش تعداد سرویسها، محل و شیوه ثبت آنها نیز بر خوانایی پروژه اثر میگذارد. آموزش استفاده از Extension Methodها برای سازماندهی کدهای Registration را پوشش میدهد تا پیکربندی وابستگیها بتواند در متدهای معنادار و قابلاستفاده مجدد گروهبندی شود. همچنین Constructor Injection و تزریق سرویسها به Razor Viewها بررسی میشوند؛ دو سناریویی که نحوه دریافت وابستگی را در بخشهای مختلف برنامه نشان میدهند. شناخت این گزینهها کمک میکند ساختار پیکربندی را با معماری برنامه هماهنگ کنید و از پراکنده شدن تنظیمات مربوط به سرویسها در نقاط مختلف کد جلوگیری کنید.
سرفصل مطالب آموزش ویدیویی تزریق وابستگی در ASP.NET Core
فصل اول: مقدمه این دوره آموزشی- مقدمه دوره
- مقدمه و بررسی کلی
- چرا از تزریق وابستگی (Dependency Injection) استفاده کنیم؟
- کدنویسی در Interface ها
- معکوس کردن کنترل با Constructor Injection
- ثبت اولین سرویس شما
- مزایای Dependency Injection
- جمع بندی
- مقدمه و بررسی کلی
- بررسی Dependency Injection مربوط به مایکروسافت
- چه چیزی را با I. Container رجیستر کنیم؟
- دسترسی پیدا کردن به Configuration از طریق یک کنترلر
- بررسی Lifetime های مربوط به سرویس ها
- بررسی سرویس های Transient
- بررسی سرویس های Singleton
- بررسی سرویس های Scoped
- جلوگیری کردن از Captive Dependency ها
- جمع بندی
- مقدمه و بررسی کلی
- معرفی اپلیکیشن Tennis Booking
- بررسی Service Descriptor ها
- مقایسه Add با TryAdd
- رجیستر کردن چند باره یک Interface
- جایگزینی و حذف Registration ها
- رجیستر کردن چندین Implementation از یک Interface
- بهبود چندیدن Implementation با TryAddEnumerable
- بررسی Implementation Factory ها
- رجیستر کردن یک Implementation برای چندین Service Type
- رجیستر کردن Open Generic ها
- کد نویسی تمیز با استفاده از Extension Method ها
- جمع بندی
- مقدمه و بررسی کلی
- مکانیسم Service Resolution
- بررسی Constructor Injection
- بررسی Action Injection
- تزریق سرویس ها به درون Middleware
- تزریق سرویس ها به درون Razor View ها
- ایجاد و استفاده از Scope ها
- جمع بندی
- مقدمه و بررسی کلی
- معرفی و نصب Scrutor
- مکانیزم Assembly Scanning با استفاده از Scrutor
- اعمال کردن Decorator Pattern با استفاده از Scrutor
- جایگزین کردن Dependency Injection Container درونی
- جمع بندی


