تزریق وابستگی Dependency Injection – جلسه ۱۶

در این جلسه از آموزش ASP.NET Core قصد داریم تا مبحث تزریق وابستگی (Dependency Injection) را با جزئیات ارائه دهیم. این قابلیت به صورت پیش‌فرض در ASP.NET Core وجود دارد و میتوان از مزایای آن استفاده نمود. با کمک ترزیق وابستگی، نگهداری کد، تست پذیری و پیاده‌‌سازی های جدید به مراتب ساده تر میگردد.

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

  • مرحله اول: ابتدا یک اینترفیس ایجاد نموده و متدهای مورد نظر را در آن تعریف نمایید.
    public interface ICostRepository
    {
        Cost GetCostByID(int id);
    }
  • مرحه دوم: برای اینترفیس ایجاد شده، به تعداد مورد نیاز کلاس جهت پیاده‌سازی ایجاد نمایید.
    public class StaticCostRepository : ICostRepository
    {
        private List<Cost> costs = new List<Cost>
        {
            new Cost {ID=1, Amount=100, Date=DateTime.Now, Category="Bill", Comment="Payment for Mobile bill"},
            new Cost{ID=2, Category="Grocery", Date=DateTime.Now,  Amount=40, Comment="Payment for buying milk and vegetables"},
            new Cost{ID=3, Category="Grocery",  Date=DateTime.Now, Amount=40, Comment="Payment for buying meat abd chicken"},
        };
        public Cost GetCostByID(int id)
        {
            return costs.FirstOrDefault(c => c.ID == id);
        }

    }
  • مرحله سوم: در متد ConfigureServices از کلاس Startup اینترفیس و پیاده‌سازی مورد نظر را تعریف نمایید.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews();
            services.AddSingleton<ICostRepository, StaticCostRepository>();

        }
  • مرحله چهارم: در کنترولر مورد نظر، اینترفیس را بوسیله Constructor Injection تزریق نمایید
    public class CostController : Controller
    {
        private readonly ICostRepository costRepository;

        public CostController(ICostRepository _costRepository)
        {
            costRepository = _costRepository;
        }
        ...
    }

تزریق وابستگی (Dependency Injection) به کنترلر (Controller)

همانگونه که در تصویر مقابل مشاهده میکنید، CostController دارای وابستگی به ICostRepository میباشد. این وابستگی از طریق Constructor Injection اعمال شده است. با استفاده از تزریق وابستگی یک نمونه از پیاده‌سازی ICostRepository در کلاس CostController ایجاد میگردد. به صورت پیشفرض ASP.NET Core نمی‌تواند تشخیص دهد که از کدام نسخه پیاده‌سازی ICostRepository میبایست یک نمونه ایجاد گردد. برای مشخص نمودن این موضوع، میبایست این سرویس در متد ConfigureServices از کلاس Startup مشخص شود.

تزریق وابستگی (Dependency Injection) به کنترلر (Controller)
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews();
            services.AddSingleton<ICostRepository, StaticCostRepository>();

        }

متدهای اضافه نمودن سرویس

سرویس‌های وب‌اپلیکیشن ASP.NET Core در متد ConfigureServices از کلاس Startup تعریف میگردد. برای تعریف سرویس‌ها، میتوان از یک متد AddSingleton، AddTransient و AddScoped استفاده نمود. تفاوت این متدها در طول عمر نمونه سرویس ایجاد شده میباشد.

متد AddSingleton

سرویسی که با این متد تعریف گردد. یک بار در زمان صدا زدن سرویس ایجاد میگردد. این سرویس در کل طول زمان وب‌اپلیکشن و تمامی درخواست‌ها ثابت میباشد.

متد AddTransient

این متد برای هر درخواست، یک نمونه از سرویس ایجاد میکند و نمونه ایجاد شده در هر درخواست متفاوت میباشد. این متد برای سرویس‌های سبک مناسب میباشد.

متد AddScoped

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

در صورت نیاز به جزئیات بیشتر، میتوانید ویدئو آموزشی این جلسه را تماشا نمایید. همچنین برای آگاهی از جلسات بعدی این دوره آموزشی، ما را در اینستاگرام، تلگرام، یوتیوب و آپارات دنبال کنید و لیست کامل جلسات در این قسمت در دسترس شما میباشد.

تماشای ویدیو در یوتیوب ما

دانلود اسلایدهای آموزشی این جلسه از اینجا

برچسب ها

0 0 رای ها
امتیازدهی به مقاله
اشتراک در
اطلاع از
guest
0 نظرات
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها
0
افکار شما را دوست داریم، لطفا نظر دهید.x