در این مقاله، ما در مورد مفهوم مهمی از ASP.NET Core MVC صحبت میکنیم – تزریق وابستگی.
اگر برخی از مقالات قبلی این آموزشی سریالی را ندیده اید، توصیه می کنیم صفحه مربوط به این سری آموزشی را مشاهده کنید: آموزش سریالی ASP.NET Core MVC.
برای دانلود سورس مقاله، اینجا کلیک کنید : تزریق وابستگی در ASP.NET Core MVC.
ما این مقاله را به قسمتهای زیر تقسیم میکنیم:
- وارونگی وابستگی و تزریق وابستگی
- تزریق وابستگی ها به داخل Controller ها
- تزریق وابستگی ها به داخل View ها
حالا بریم تا کارمان را شروع کنیم.
وارونگی وابستگی و تزریق وابستگی
وارونگی وابستگی یکی از اصول اصلی طراحی نرم افزار است که ما از آن برای ایجاد ماژول هایی استفاده می کنیم که 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 در زمان اجرا ایجاد میشود:
تمام. حالا برنامه را اجرا میکنیم و به فرم ایجاد کتاب میرویم:

میبینیم که لیست Genre ها با گرفتن مقادیر از BooksLookupService پر شده است.
عالی. ما نحوه تزریق مستقیم یک وابستگی به داخل view را یاد گرفتیم.
نتیجه گیری
در این مقاله، ما عناوین زیر را یاد گرفتیم:
- اصل وارونگی وابستگی و نحوه دستیابی به آن با استفاده ازتزریق وابستگی
- تزریق وابستگی ها به داخل کنترلرها
- تزریق وابستگی ها به داخل View ها از یک برنامه ASP.NET Core MVC
در قسمت بعدی این سری آموزشی، ما unit testing در ASP.NET Core MVC را یاد میگیریم.