آموزش Dependency Injection

در ادامه دوره پیشرفته Entity Framework Core 9، به آموزش Dependency Injection بپردازیم. همچنین با Interface آشنا شده. و نحوه ثبت سرویس در DI Container را یادمیگیریم. و در آخر به تزریق سرویس به کنترلر میپردازیم.

Dependency Injection چیست؟

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

تزریق وابستگی یا Dependency Injection یک روش برنامه نویسی است که ایجاد و استفاده از اجزا را از هم جدا می‌کند.Dependency Injection شامل دو کلمه کلیدی است

  • وابستگی‌ها: اجزای کد برای انجام وظایف خود به بسیاری از اشیا متکی هستند. وابستگی‌های مختلفی مانند منابع خارجی، اشیاء دیگر یا خدمات وجود دارد.
  • تزریق‌: کامپوننت‌ها وابستگی‌های داخلی را در Dependency Injection ایجاد نمیکنند. در عوض، این تکنیک وابستگی‌ها را از بیرون فراهم می‌کند. یا به عبارتی تزریق می‌کند. این رویکرد بین اجزا و وابستگی‌ها جدایی ایجاد می‌کند.

پیاده سازی عملی Dependency Injection

فرض کنید نیاز به سرویسی نیاز داریم که میزان ارزش افزوده را بدست آورد. این ارزش افزوده در ۳ شهر به قرار است به صورت آزمایشی ایجاد شود. تهران، شیراز و اصفهان و در هر شهر مختلف است. در تهران ۲۰ درصد در شیراز ۱۵ درصد و در اصفحان ۱۰ درصد.

قدم اول ایجاد Interface

اینترفیس Interface چیست ؟ در واقع یک قرارداد است که مشخص می‌کند هر کلاسی که از آن استفاده می‌کند، باید چه متدها و پراپرتی‌هایی را پیاده‌سازی کند. Interface به برنامه‌نویسان این امکان را می‌دهند که وابستگی‌ها را کمتر کنند و قابلیت‌های بیشتری برای تست و توسعه‌ی کد فراهم می‌کنند. نام اینترفیس خود را IAddValueService قرار داده و به صورت زیر متدهای آن را اضافه میکنیم.

public interface IAddValueService
{
    int Tehran(int value);
    int Shiraz(int value);
    int Esfehan(int value);
}

قدم دوم ایجاد سرویس

یک سرویس با نام AddValueService اضافه میکنیم

public class AddValueService : IAddValueService
{
    public int Esfehan(int value)
    {
        return (value * 20) / 100;
    }
    public int Shiraz(int value)
    {
        return (value * 15) / 100;
    }
    public int Tehran(int value)
    {
        return (value * 10) / 100;
    }
}

قدم سوم ثبت سرویس در DI Container

در فایل Program.cs باید در بخش DI Container سرویس خود را معرفی و ثبت کنیم. برای ثبت سرویس از ۳ متد میتوان استفاده کرد. این انتخاب‌ها به شما امکان می‌دهند که بهترین روش را برای مدیریت طول عمر سرویس‌ها متناسب با نیازهای برنامه خود استفاده کنید.

متد AddScoped

هر بار که یک درخواست جدید به سرور ارسال شود، یک شیء جدید از سرویس ایجاد می‌شود. بنابراین، اگر چندین بار در طول یک درخواست از یک سرویس استفاده کنیم، همان شیء تکراری استفاده خواهد شد. زمان استفاده: وقتی نیاز دارید که یک سرویس در طول یک درخواست واحد از یک شیء واحد استفاده کند و در پایان درخواست آن شیء از بین برود.

services.AddScoped<ITaxService, TaxService>();

متد AddSingleton

یک شیء واحد برای کل طول عمر برنامه ایجاد می‌شود و همه درخواست‌ها (چه همزمان و چه جداگانه) از همان شیء واحد استفاده می‌کنند. زمان استفاده: وقتی نیاز دارید یک شیء را یک بار بسازید و از آن برای تمام درخواست‌ها و در طول اجرای برنامه استفاده کنید، مانند سرویس‌های دارای وضعیت ثابت (Stateful) یا تنظیمات پیکربندی.

services.AddSingleton<ITaxService, TaxService>();

متد AddTransient

هر بار که یک شیء از سرویس نیاز شود، یک نمونه جدید ایجاد می‌شود. یعنی، با هر بار فراخوانی یا تزریق سرویس، یک شیء جدید تولید می‌شود. زمان استفاده: زمانی که نیاز دارید هر بار که سرویس فراخوانی می‌شود، یک شیء تازه ایجاد شود، مثلاً برای سرویس‌هایی که سبک هستند و وضعیت خاصی ندارند.

services.AddSingleton<AddTransient, TaxService>();
زمان مناسب برای استفادهطول عمرنوع سرویس
وقتی که سرویس فقط باید در طول یک درخواست HTTPبرای هر درخواست HTTP یک نمونه از سرویس ساخته می‌شودScoped
برای سرویس‌هایی که باید در کل برنامه یکسان باشند.یک نمونه در کل طول عمر برنامه (یا تا زمان راه‌اندازی مجدد)Singleton
برای سرویس‌هایی که سبک هستند و هر بار نیاز به نمونه جدید دارند.هر بار که نیاز شد یک نمونه جدید ساخته می‌شودTransient

ثبت سرویس در DI Container

  • استفاده از AddSingleton برای سرویس‌هایی که وضعیت (State) خاصی دارند که در طول برنامه تغییر می‌کند، ممکن است خطرناک باشد، زیرا همه درخواست‌ها به همان وضعیت دسترسی دارند.
  • متد AddScoped برای سناریوهایی که هر درخواست باید با داده‌های منحصر به فرد کار کند، مناسب است.
  • متد AddTransient برای سرویس‌هایی که وضعیت نگه‌داری نمی‌کنند و سبک هستند مناسب است، زیرا ایجاد مکرر شیء جدید هزینه زیادی ندارد.

قدم جهارم تزریق سرویس به کنترلر

در کنترلر می‌توانیم سرویس را از طریق سازنده (Constructor) تزریق کنیم.

private readonly IAddValueService _service;
public HomeController(IAddValueService service)
{
    _service = service;
}

دانلود فایل ارائه

خرید از تهران آی تی به صورت آنلاین میباشد و لینک دانلود به صورت خودکار برای شما ایمیل میشود. همه گزینه‌ها همان فایل کامل را به شما می‌دهند. تفاوت فقط در نحوه جبران هزینه است؛ انتخاب با وجدان شماست. چنانچه نیاز به هرگونه سوال و یا کمک در خرید آنلاین داشتید با شماره 09121486770 تماس بگیرید. شماره کارت ما 6362141104352035 به نام محمدرضا احدیان میباشد.

دانلود فایل ارائه

سورس کد EFCore9

شما می‌توانید سورس کد کامل EFCore9 را از طریق گیت مشاهده کنید و یا اگر گیت کار نمی‌کنید، به راحتی آن را به صورت فایل فشرده (ZIP) دانلود کنید. فایل‌های دانلودی شامل تمام بخش‌های پروژه است و می‌توانید آن را روی سیستم خود اجرا یا تغییر دهید.

سورس کد EFCore9

مشاهده در آپارات یا یوتیوب

محتوای ویدیویی این صفحه در سایت قابل مشاهده است. اما اگر عادت دارید توی پلتفرم آپارات یا یوتیوب ویدیوها را مشاهده کنید، می‌توانید از دکمه‌های زیر استفاده کنید.

تماشای ویدیوی آموزش Dependency Injection در آپارات و یوتیوب

اشتراک‌گذاری با یک کلیک

با یک کلیک، محتوای این صفحه را در شبکه‌های اجتماعی، ایمیل یا پیام‌رسان‌های مورد علاقه‌تان به‌سرعت به اشتراک بگذارید.

اشتراک‌گذاری صفحه آموزش Dependency Injection در شبکه‌های اجتماعی

نظرات شما برای ما ارزشمند است

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

نظرات کاربران

فرم افزودن دیدگاه

با ارسال نظرات خود ما را در ایجاد محتوای بهتر کمک کنید.

با خدمات تهران آی تی آشنا شوید

تهران آی تی با افتخار خدمات زیر را ارائه می‌دهد.