تزریق وابستگی در ASP.NET Core MVC
شناسه پست: 3350
بازدید: 934

در این مقاله، ما در مورد مفهوم مهمی از ASP.NET Core MVC صحبت میکنیم – تزریق وابستگی.

اگر برخی از مقالات قبلی این آموزشی سریالی را ندیده اید، توصیه می کنیم صفحه مربوط به این سری آموزشی را مشاهده کنید: آموزش سریالی ASP.NET Core MVC.

برای دانلود سورس مقاله، اینجا کلیک کنید : تزریق وابستگی در ASP.NET Core MVC.

ما این مقاله را به قسمتهای زیر تقسیم میکنیم:

حالا بریم تا کارمان را شروع کنیم.

وارونگی وابستگی و تزریق وابستگی

وارونگی وابستگی یکی از اصول اصلی طراحی نرم افزار است که ما از آن برای ایجاد ماژول هایی استفاده می کنیم که loosely coupled (در حداقل سطح وابستگی به یکدیگر قرار دارند) هستند. هنگام ایجاد برنامه‌ها، می‌توانیم با استفاده از تکنیکی به نام Dependency Injection (تزریق وابستگی) به این هدف برسیم. Dependency Injection (DI) روش تزریق ماژول های وابسته به کلاس های ما است.

بنابراین در این قسمت، ما پشتیبانی از تزریق وابستگی در یک برنامه ASP.NET Core MVC را بررسی میکنیم.

تزریق وابستگی ها به داخل Controller ها

ASP.NET Core از تزریق وابستگی بین کلاسها و وابستگی هایشان پشتیبانی میکند. کنترلرهای MVC، وابستگی ها را صریحا از طریق سازنده ها درخواست می کنند. علاوه بر این، ASP.NET Core، به صورت توکار از تزریق وابستگی پشتیبانی میکند، از این جهت ایجاد برنامه برای تست و نگهداری آسان تر است.

ما service ها را به عنوان پارامتر سازنده اضافه می کنیم و service ،runtime را از service container،

resolve می کند. ما به طور معمول service ها را با استفاده از اینترفیس ها تعریف میکنیم.

وقتی یک الگوی repository را در برنامه ASP.NET Core MVC پیاده سازی میکنیم، در واقع تزریق وابستگی را در کنترلرهای خود مورد استفاده قرار میدهیم.

بیایید یک برنامه ASP.NET Core MVC را ایجاد کنیم و یک data repository ساده را پیاده سازی کنیم.

اول از همه، یک اینترفیس IDataRepository را ایجاد کنیم:

سپس یک کلاس EmployeeManager که اینترفیس IDataRepository را پیاده سازی میکند را ایجاد میکنیم:

مرحله بعدی، اضافه کردن service به service container است. ما باید این را در کلاس Startup.cs در متد ()ConfigureServices انجام دهیم:

با این کار، ما repository را با استفاده از تزریق وابستگی پیکربندی کردیم.

در مرحله بعد، EmployeeController را با اکشن متد ()Index برای گرفتن لیست تمام کارمندان ایجاد میکنیم:

اینجا ما اول یک متغیر _dataRepository از نوع IDataRepository<Employee> تعریف میکنیم. بعد آن را از طریق سازنده تزریق کردیم.

ما همچنین میتوانیم بدون استفاده از تزریق سازنده، یک service را به طور مستقیم به داخل یک اکشن متد تزریق کنیم. میتوانیم از ویژگی [FromServices] برای این منظور استفاده کنیم:

ویژگی FromServices مشخص میکند که یک پارامتر action باید با استفاده از service های request بایند شود.

عالی. ما نحوه استفاده از تزریق وابستگی برای ارائه وابستگی ها به داخل یک کنترلر را یاد گرفتیم.

حالا نحوه تزریق وابستگی ها به داخل View ها را بررسی کنیم.

تزریق وابستگی ها به View ها

ASP.NET Core از تزریق وابستگی ها به View ها پشتیبانی میکند.

چه زمانی وابستگی ها را به View ها تزریق کنیم

تزریق service ها به view ها یک انحراف از مفهوم MVC است. اما در برخی موارد، ممکن است سرویس‌های مخصوص view داشته باشیم که داده‌هایی را که فقط برای پر کردن عناصر view استفاده می‌کنیم برمی‌گردانند. به عنوان یک مثال، یک service را در نظر بگیرید که یک مجموعه ای از مقادیری که ما نیاز داریم در یک  list control نمایش دهیم را به ما میدهد. در چنین سناریوهایی، ما میتوانیم service ها را مستقیم به داخل view ها تزریق کنیم. تزریق View میتواند برای پر کردن گزینه ها در عناصر UI همانند dropdown list ها مفید باشد.

فرمی را برای ایجاد کتابی در نظر بگیرید که شامل گزینه هایی برای تعیین یک ژانر است. Render کردن داده ها با استفاده از یک رویکرد استاندارد MVC، به controller برای درخواست service های data access برای این مجموعه از گزینه ها و سپس پر کردن یک Model یا ViewBag با مجموعه گزینه های مورد نظر برای bind شدن نیاز دارد.

یک رویکرد جایگزین این است که service ها را مستقیم به داخل یک view تزریق کنیم. این رویکرد، مقدار کد مورد نیاز کنترلر را با انتقال منطق ساخت عنصر view به خود view به حداقل می رساند.

چطور service ها را به داخل View ها تزریق کنیم

ما میتوانیم با استفاده از inject directive@، یک service  را به داخل یک view تزریق کنیم. inject@ یک ویژگی را به view ما اضافه میکند و آن را با استفاده از DI، مقداردهی اولیه میکند:

یک controller action method برای نمایش یک فرم ایجاد کتاب بسازیم:

سپس یک کلاس مدل Book ایجاد کنیم:

در مرحله بعد، یک BooksLookupService را برای تامین داده های لیست برای Genre ها تعریف کنیم:

سپس یک view ایجاد کرده و یک نمونه از BooksLookupService را به داخل آن تزریق کنیم:

این، مقادیر لیست را به داخل view تامین خواهد کرد.

به عنوان آخرین مرحله، باید نوع هایی را که از طریق تزریق وابستگی درخواست می کنیم را در ()Startup.ConfigureServices ثبت کنیم. اگر یک نوع ثبت نشده باشد، یک exception در زمان اجرا ایجاد میشود:

تمام. حالا برنامه را اجرا میکنیم و به فرم ایجاد کتاب میرویم:

تزریق وابستگی به داخل view

میبینیم که لیست Genre ها با گرفتن مقادیر از BooksLookupService پر شده است.

عالی. ما نحوه تزریق مستقیم یک وابستگی به داخل view را یاد گرفتیم.

نتیجه گیری

در این مقاله، ما عناوین زیر را یاد گرفتیم:

  • اصل وارونگی وابستگی و نحوه دستیابی به آن با استفاده ازتزریق وابستگی
  • تزریق وابستگی ها به داخل کنترلرها
  • تزریق وابستگی ها به داخل View ها از یک برنامه ASP.NET Core MVC

در قسمت بعدی این سری آموزشی، ما unit testing در ASP.NET Core MVC را یاد میگیریم.

نویسنده

امید عباسی
من امید عباسی هستم. سالهاست که در زمینه برنامه نویسی با تکنولوژی دات نت فعالیت میکنم و عاشق این هستم که تجربیات و دانش خودم را در این زمینه با دیگران به اشتراک بزارم. خیلی دوست دارم که نظر و انتقاد خودتون رو در مورد این نوشته برای من بنویسید تا بتونم در آینده، مطالب بهتر و ارزشمندتری را برای شما فراهم کنم. در صورت داشتن هرگونه سوال هم در قسمت دیدگاه ها میتونید با بنده در ارتباط باشید