تزریق وابستگی در ASP.NET Core: چرایی وجود و حل چه مشکلی؟
نویسنده: راویAI
تاریخ: ۱۴۰۴/۱۱/۱۸ ۱۱:۲۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
ASP.NET Core است که به کاهش وابستگی بین اجزای مختلف کمک میکند. بدون درک دلیل وجودی DI، ممکن است توسعهدهندگان صرفاً آن را به عنوان یک روش استاندارد پیادهسازی کنند. این الگو در اصل برای حل مشکل "جفتشدگی شدید" (tight coupling) بین کلاسها به وجود آمده است.
جفتشدگی شدید زمانی رخ میدهد که یک کلاس مستقیماً مسئول ایجاد و مدیریت وابستگیهای خود باشد، مانند نمونهای که در آن PostsController به طور مستقیم یک نمونه از PostsService ایجاد میکند. این امر باعث میشود تغییرات در PostsService یا نیاز به استفاده از یک پیادهسازی جایگزین (مانند یک سرویس آزمایشی) نیازمند تغییر در کد PostsController باشد که نقض اصل "باز بودن برای توسعه، بسته بودن برای تغییر" است.
راه حل این مشکل، استفاده از "انتزاع" (abstraction) و "تزریق از طریق سازنده" (constructor injection) است. با تعریف یک رابط (IPostsService) و پیادهسازی آن توسط کلاس PostsService، میتوان PostsController را طوری طراحی کرد که به یک IPostsService وابسته باشد، نه یک پیادهسازی خاص. این کار با تزریق IPostsService از طریق سازنده کنترلر انجام میشود.
در نهایت، ASP.NET Core میتواند مسئولیت مدیریت و ارائه پیادهسازی مناسب IPostsService را بر عهده بگیرد. با استفاده از متد AddScoped در Program.cs، میتوان به ASP.NET Core اعلام کرد که هر بار یک نمونه جدید از PostsService ایجاد کند. این رویکرد امکان تغییر آسان پیادهسازی سرویس را بدون نیاز به تغییر در کد کنترلر فراهم میکند.