
WEBVTT

00:00.050 --> 00:05.390
حالا که ایده‌ای از وابستگی‌ها داریم، بیایید نگاه کنیم به **dependency injection**.

00:05.390 --> 00:06.050
این چیه؟

00:06.080 --> 00:15.020
خب، **dependency injection** یا DI، یک الگوی طراحی است که برای رسیدن به **وارونگی کنترل** یا همان

00:15.020 --> 00:19.190
IOC بین کلاس‌ها و وابستگی‌های آن‌ها استفاده می‌شود.

00:19.190 --> 00:25.340
به جای اینکه یک کلاس خودش وابستگی‌هایش را ایجاد کند، این وابستگی‌ها از بیرون تأمین می‌شوند.

00:25.340 --> 00:32.030
راه ساده‌تر برای توضیح این است: مثل استفاده از **سازنده‌ای** که در ویدیوی قبلی ساختیم، به جای اینکه

00:32.030 --> 00:37.940
سازنده برود ابزارها را بخرد، کسی ابزارها را برای سازنده می‌آورد.

00:37.940 --> 00:43.970
به این ترتیب، سازنده می‌تواند روی ساختن تمرکز کند بدون اینکه نگران چگونگی گرفتن ابزارها باشد.

00:43.970 --> 00:47.120
و انواع مختلفی از **dependency injection** وجود دارد.

00:47.120 --> 00:53.720
یکی **constructor injection** است که در این ویدیو نگاه می‌کنیم، جایی که وابستگی‌ها از طریق **سازنده کلاس** تأمین می‌شوند.

00:53.720 --> 00:55.640
در سازنده ابزارهایی مثل **اره** یا **چکش** و غیره را منتقل می‌کنید.

01:03.110 --> 01:09.830
بعد، **setter injection** وجود دارد که وابستگی‌ها از طریق یک **ویژگی** یا **متد** تأمین می‌شوند، و

01:09.830 --> 01:15.710
سپس **interface injection** که وابستگی‌ها از طریق اینترفیس که کلاس پیاده‌سازی می‌کند تأمین می‌شوند.

01:16.610 --> 01:17.270
خُب.

01:17.270 --> 01:21.530
بیایید مثال خودمان از ویدیوی قبلی را ببینیم.

01:21.530 --> 01:26.000
و بفهمیم **dependency injection** مخصوصاً با **constructor injection** چطور کار می‌کند.

01:26.000 --> 01:31.100
در مثال ما، هیچ **dependency injection**‌ای استفاده نشده بود.

01:31.100 --> 01:36.470
پس ما یک وابستگی داشتیم ولی آن را **inject** نکرده بودیم.

01:36.500 --> 01:42.470
چطور می‌توانیم کلاس **سازنده** را تغییر دهیم تا از **dependency injection** استفاده کند؟

01:42.470 --> 01:49.790
می‌توانیم این کار را با گفتن این جمله انجام دهیم: «مثلاً هر وقت می‌خواهی از من به عنوان سازنده استفاده کنی، باید **چکش** به من بدهی،

01:49.790 --> 01:56.450
چون من فقط می‌روم سر کارم، مثل اینکه فقط کارم را انجام می‌دهم، می‌روم به **محل ساخت و ساز**.

01:56.450 --> 01:57.800
ولی

01:57.800 --> 02:01.790
تو باید ابزارها را به من بدهی، چون در غیر این صورت نمی‌توانم کارم را انجام دهم.

02:01.790 --> 02:02.420
باشه؟

02:02.420 --> 02:09.170
پس باید به من چکش بدهی و باید اره‌ام و هر ابزار دیگری که داریم بدهی.

02:09.170 --> 02:16.610
حالا، به جای اینکه سازنده مسئول ایجاد وابستگی‌هایش باشد، حالا این کار از طریق **dependency injection** اتفاق می‌افتد.

02:16.610 --> 02:17.270
پس

02:17.270 --> 02:24.950
ما چکش را به سازنده **inject** می‌کنیم با گفتن: «باشه، هر وقت از تو استفاده کنم، چکش را به تو می‌دهم، و اره را هم هر وقت از تو استفاده کنم می‌دهم.»

02:24.950 --> 02:30.290
باشه.

02:31.100 --> 02:31.760
این الان همان **constructor injection** یا DI است.

02:37.730 --> 02:41.360
**dependency injection** DI، عالیه.

02:41.360 --> 02:42.830
واقعا جالب.

02:42.830 --> 02:50.750
حالا اگر بخواهم از سازنده‌ام استفاده کنم، اگر بخواهم خانه‌ام را بسازد و بخواهم از روش‌های او استفاده کنم،

02:50.750 --> 02:54.470
در واقع، می‌خواهم از روش‌های او برای تکمیل خانه‌ام استفاده کنم.

02:54.890 --> 03:00.710
خب، پس باید ابزارها مثل **چکش** و **اره** و غیره را به او بدهیم.

03:01.760 --> 03:05.600
حالا می‌توانیم یک چکش بسازیم:

03:05.750 --> 03:13.670
چکش، چکش جدید، و می‌توانیم بگوییم اره، اره جدید، و می‌توانیم بگوییم سازنده، سازنده جدید.

03:13.670 --> 03:17.360
و ما چکش و اره را به سازنده **inject** می‌کنیم.

03:17.360 --> 03:22.670
حالا می‌توانیم فقط از سازنده برای انجام روش‌هایش مثل ساختن خانه استفاده کنیم.

03:22.880 --> 03:27.140
بیایید این مثال را اجرا کنیم و ببینیم چه اتفاقی می‌افتد.

03:27.140 --> 03:35.330
و خواهیم دید که هیچ چیزی نمی‌بینیم چون اینجا **ReadLine** یا **ReadKey** نداریم.

03:35.330 --> 03:36.920
پس دوباره اجرا می‌کنیم.

03:36.920 --> 03:41.780
و می‌بینیم: **چکش زدن میخ‌ها، اره کردن چوب، خانه ساخته شد**.

03:41.780 --> 03:42.860
عالی.

03:43.040 --> 03:48.770
اگر همیشه اینقدر ساده بود، فکر می‌کنم اره کردن چوب باید قبل از چکش زدن می‌آمد، ولی به هر حال.

03:48.770 --> 03:57.770
خُب، در این مورد دیدیم که **dependency injection** با **constructor injection** چگونه کار می‌کند.

03:57.770 --> 04:00.230
امیدوارم از این ویدیو لذت برده باشید.

04:00.230 --> 04:06.530
حالا می‌دانید **dependency injection** چیست، حداقل با یک مثال خیلی ساده اینجا.

---
