آموزش Dependency Injection

تهران آی تی / برنامــه نویــسـی / آموزش Dependency Injection

آموزش 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>();

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

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

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

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

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

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

دانلود سورس کد پروژه از گیت هاب دانلود

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

جستجو کنید
دسترسی سریع
دسته ها

طراحی و پیاده سازی پروژه های طراحی سایت دانشجویی

انجام، اجرا و طراحی پروژه های طراحی سایت برای دانشجویان با HTML CSS PHP ASP.NET JAVA و ... با کمترین هزینه. برای مشاهده نمونه کارها و یا دریافت مشاوره رایگان از تیم طراحی سایت تهران آی تی با ما در تماس باشید. ما بهترین پروژه های طراحی سایت را با حداقل هزینه برای شما طراحی میکنیم - مشاوره رایگان 09121486770

مــشاوره و مشاهده نمونه کارها

مطالب مرتبط

لطفا از مطالب مرتبط با این پست دیدن فرمایید

جــذاب های هفته

از پربازدیدترین مطالب تهران آی تی در هفته ای که گذشت دیدن فرمایید

باورکردنی نیست فقط با 300 هزار تومان

طراحی سایت شما + طراحی اپلیکیشن هدیه و رایگان
این یک حراج است در مدت زمان محدود - شرکت های زیادی سایت های ارزان طراحی میکنند اما آیا کیفیت لازم را دارا هستند؟ طراحی سایت ارزان به همراه اپلیکیشن رایگان هدیه برای اولین بار توسط تهران آی تی مخصوص سازمان ها و کسب و کار های کوچک و بزرگ و حتی جدید تیم طراحی سایت تهران آی تی در کنار شماست تا شناخته شوید - مشاوره رایگان 09121486770

مــشاوره و مشاهده نمونه کارها

پشتیبانی 24 ساعته

تیم تهران آی تی در هفت روز هفته و 24 ساعت روز آماده پاسخ گویی به سوالات کاربران و ارائه مشاره رایگان میباشد