2418

بررسی Service Lifetime تزریق وابستگی در Asp core

کدسل برنامه نویسی وب Asp.Net Core

لینک کوتاه https://codecell.ir/course/2418
مدرس: سهراب قیصری
تعداد ویدیوها: 1
مدت زمان دوره: 00:20:45
وضعیت دوره: به اتمام رسیده
آخرین بروزرسانی: 1401/03/24
به اشتراک گذاری
نظرات
0
دیگر آموزش های مدرس:
بررسی طول عمر وابستگی ها در Asp core

تزریق وابستگی یا Dependency injection چیست؟

تزریق وابستگی (DI) الگویی است که می تواند به توسعه دهندگان کمک کند تا بخش های مختلف برنامه های خود را جدا کنند. هنگامی که یک سیستم برای استفاده از DI طراحی شده است، و بسیاری از کلاس‌ها وابستگی‌های خود را از طریق سازنده (یا ویژگی‌هایشان) درخواست می‌کنند، مفید است که کلاسی برای ایجاد این کلاس‌ها با وابستگی‌های مرتبط با آنها اختصاص داده شود. به این کلاس ها کانتینرها یا به طور خاص کانتینرهای وارونگی کنترل (IoC) یا ظروف تزریق وابستگی (DI) گفته می شود. کانتینر اساساً کارخانه ای است که مسئول ارائه نمونه هایی از انواع درخواستی از آن است.

تزریق وابستگی(Dependency injection) در .Net Core

Microsoft .NET Core شامل یک کانتینر داخلی ساده  است (توسط اینترفیس IServiceProvider ارائه  شده است) که از تزریق سازنده پشتیبانی می کند. فضای نام که تحت آن گنجانده شده است Microsoft.Extensions.DependencyInjection است.

انواع روش های پیاده سازی تزریق وابستگی یا Dependency injection

تزریق وابستگی به روش Constructor Injection

در Constructor Injection ، انژکتور (کلاس واگذار شده) نمونه های جدیدی از اشیاء وابسته را از طریق سازنده خود ایجاد می کند.

تزریق وابستگی به روش Property Injection

در Property Injection ، انژکتور (کلاس واگذار شده) اشیاء وابسته را از طریق یک پراپرتی(ویژگی) عمومی تزریق می کند.

تزریق وابستگی به روش Method Injection

در Method Injection ، انژکتور (کلاس واگذار شده) از روش خاصی برای تزریق اشیاء وابسته استفاده می کند.

طول عمر وابستگی

در زمان ثبت سرویس، وابستگی ها نیاز به تعریف طول عمر دارند. طول عمر سرویس، شرایطی را که تحت آن یک نمونه جدید از سرویس ایجاد می شود را مشخص می کند. در زیر طول عمر تعریف شده توسط چارچوب .NET Core DI آمده است.

تزریق وابستگی Transient یا گذرا

وابستگی های با طول عمر Transient ، با هر بار درخواست، نمونه جدیدی از آن توسط کانتینر ایجاد می شود.
اغلب اوقات، وابستگی هایی که Transient اعلام می شوند، بسیار سبک هستند و خود تعداد محدودی وابستگی دارند. علاوه بر این، فرض بر این است که وابستگی هایی که Transient مشخص شده اند، وضعیت خود را مدیریت نخواهند کرد. 
وابستگی با طول عمر Transient به عنوان طول عمر سرویس «پیش‌فرض» در NET 6 در نظر گرفته می‌شود. این بدان معناست که شما باید همه وابستگی‌ها را Transient کنید، مگر اینکه واقعاً نیاز به استفاده از یکی از طول عمر سرویس‌های دیگر داشته باشید.

تزریق وابستگی Scoped یا محدوده شده

وابستگی های با طول عمر Scoped به ازاء هر درخواست برنامه ایجاد می شوند. "درخواست برنامه" در انواع مختلف برنامه ها متفاوت است. در برنامه های وب ASP.NET، "درخواست برنامه" یک درخواست وب HTTP است.
در حالت Scoped نمونه وابستگی در ابتدای درخواست ایجاد می‌شود و به تمام وابستگی‌هایی که در طول درخواست به آن نیاز دارند تزریق می‌شود و در انتهای درخواست توسط کانتینر dispose می‌شود.
یک مثال کاربردی استفاده از تزریق وابستگی Scoped، اطلاعات مربوط به خود درخواست HTTP است، مانند کوکی ها. این اطلاعات باید در طول مدت درخواست وجود داشته باشد و همچنین باید برای هر درخواست بعدی قابل استفاده باشد.

تزریق وابستگی Singleton یا یگانه

Singleton یک وابستگی است که یک بار توسط کانتینر هنگام راه اندازی برنامه ایجاد می شود و سپس به هر کلاس وابسته ای که به یک نمونه از آن نیاز دارد تزریق می شود. این نمونه تا زمانی که برنامه خاموش یا راه اندازی مجدد نشود وجود خواهد داشت (مایکروسافت به صراحت می گوید که ما نباید کدی را برای مدیریت طول عمر سرویس singleton پیاده سازی کنیم و باید به کانتینر اجازه دهیم آن را برای ما مدیریت کند).
در دنیای واقعی، یکی از نمونه‌های وابستگی Singleton ممکن است یک سرویس کش باشد که یک حافظه کش و دسترسی‌ها را برای آن کش نگهداری می‌کند.
وابستگی های Singleton می توانند وضعیت داخلی خود را مدیریت کنند. از آنجایی که وابستگی فقط یک بار ایجاد می شود، وضعیت داخلی نمونه می تواند تغییر کند و حفظ شود. این همان چیزی است که آن ها را از وابستگی های Transient یا Scoped متمایز می کند.

ما در این آموزش یک پروژه Asp Core 6 ایجاد خواهیم کرد و طول حیات انواع تزریق وابستگی Singleton،Scoped و Transient را بصورت عملی بررسی خواهیم کرد.

دریافت سورس پروژه بررسی Service Lifetime  تزریق وابستگی در Asp core

نتیجه گیری:

وابستگی‌ها می‌توانند یکی از سه طول عمر زیر را داشته باشند:

  • سرویس های Transient هر بار که تزریق می شوند ایجاد می شوند. Transient طول عمر سرویس پیش فرض است.
  • سرویس های Scoped یک بار در هر درخواست ایجاد می شود.
  • سرویس های Singleton فقط یک بار ایجاد می شود، همان نمونه به هر کلاس وابسته تزریق می شود.

اینکه هر وابستگی چه طول عمری باید داشته باشد به چندین چیز بستگی دارد، از جمله وضعیت داخلی که هر وابستگی باید حفظ کند. به‌طور پیش‌فرض، سرویس ها باید Transient باشند و تنها در صورتی از طول عمر سرویس‌های scoped یا singleton استفاده کنند که مورد استفاده آنها چنین طول عمری را ایجاب کند.

 

فهرست ویدیوها
مدت زمان دوره: 00:20:45
01

بررسی LifeTime تزریق وابستگی در سرویس های Scope،Transient و Singleton

00:20:45

پرسش های متداول

تزریق وابستگی (Dependency injection) الگویی است که می تواند به توسعه دهندگان کمک کند تا بخش های مختلف برنامه های خود را جدا کنند.

  • تزریق وابستگی به روش Constructor Injection
  • تزریق وابستگی به روش Property Injection
  • تزریق وابستگی به روش Method Injection

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

  • Transient یا گذرا
  • Scoped یا محدوده شده
  • Singleton یا یگانه

سرویس های Transient هر بار که تزریق می شوند ایجاد می شوند. Transient طول عمر سرویس پیش فرض است.

سرویس های Scoped یک بار در هر درخواست ایجاد می شود.

سرویس های Singleton فقط یک بار ایجاد می شود، همان نمونه به هر کلاس وابسته تزریق می شود.

سرویس های Scoped به ازاء هر درخواست ایجاد می شود ولی سرویس های Transient با هربار فراخوانی ایجاد می شوند.

مقالات آموزش برنامه نویسی مدرس

Response Caching در ASP.NET Core

Response Caching یک مکانیزم ذخیره سازی پاسخ سرور توسط مرورگر یا سایر کلاینت ها است. با استفاده از Response Caching در Asp.net Core می توانیم عملکرد و کارایی سیستم را بالا ببریم.

669 0 1402/10/22

Output Caching در ASP.NET Core 8.0

Output Caching یک ویژگی جدید است که از زمان .NET 7 معرفی شده است. این ویژگی به ما این امکان را می دهد که به راحتی یک کش پاسخ برای Web API خود بدون پیاده سازی IMemoryCache راه اندازی کنیم.

723 0 1402/10/14

الگوی طراحی زنجیره مسئولیت در سی شارپ

الگوی زنجیره مسئولیت یا Chain of Responsibility Design Pattern یک الگوی طراحی رفتاری(behavioral design pattern) است که اجازه می‌دهد یک درخواست در امتداد زنجیره‌ای از کنترل‌کننده‌های بالقوه ارسال شود تا زمانی که درخواست مناسب برای پردازش آن را پیدا کند.

685 2 1402/10/01

ViewComponent در ASP.NET Core

در ASP.NET Core با استفاده از ViewComponent ها می توان اجزای ماژولار، قابل استفاده مجدد، قابل نگهداری و مقیاس پذیر برای ساخت برنامه های کاربردی وب ایجاد کرد. در این مقاله به نحوه ایجاد و فراخوانی ViewComponent در Asp.net core پرداخته ایم.

1٬431 2 1402/05/15

تطبیق الگو در NET 7: ساده سازی تجزیه و تحلیل داده ها

تطبیق الگو یا Pattern Matching در net7 یک تکنیک قدرتمند برای تجزیه و تحلیل و دستکاری داده ها بر اساس ساختار آن ها است. تطبیق الگو یا Pattern Matching به توسعه دهندگان اجازه می دهد تا مقادیر را با یک الگوی خاص مطابقت دهند و اقدامات مربوطه را انجام دهند.

880 1 1402/04/05

تزریق وابستگی در ASP.NET Core

تزریق وابستگی (DI) یک الگوی طراحی نرم افزاری است که امکان ایجاد برنامه های کاربردی و ماژولار را فراهم می کند.. در .NET Core تزریق وابستگی یا Dependency injection یک ویژگی مهم است که می تواند برای ساده سازی توسعه برنامه، بهبود تست پذیری و کاهش پیچیدگی کد مورد استفاده قرار گیرد.

1٬964 1 1402/02/04

ضروری ترین کتابخانه های NuGet برای ASP.NET Core

در این مقاله مهمترین،ضروری ترین و پرکاربردترین کتابخانه های NuGet که هر توسعه‌ دهنده‌ ASP.NET Core باید برای توسعه بهتر و کاهش زمان مورد نیاز برای برنامه ‌های خود از آن استفاده کنند را مورد بررسی قرار داده ایم.

1٬517 1 1401/12/29

الگوی طراحی Factory در سی شارپ

الگوهای طراحی یکی از مهمترین جنبه های طراحی و معماری نرم افزار است. Factory Method یک الگوی طراحی ایجادی است که یک رابط برای ایجاد اشیاء در یک سوپر کلاس فراهم می‌کند. ما در این مقاله الگوی Factory Method Design در سی شارپ را بررسی می کنیم.

1٬642 1 1401/10/28

مقایسه List و Array در سی شارپ

آرایه و لیست در سی شارپ هر دو به عنوان مجموعه ای از مقادیر عمل می کنند، اما در نحوه ذخیره محتوای خود در حافظه و نحوه دسترسی به آنها متفاوت هستند. در این مقاله Benchmark و کارایی List<T> با سایز داینامیک، List<T> با سایز ثابت و Array ها را بررسی می کنیم.

2٬221 2 1401/09/01

LinkedList در سی شارپ

LinkedList یا لیست پیوندی در سی شارپ یک ساختار داده خطی است که عنصر را در مکان غیر پیوسته ذخیره می کند. LinkedList شامل گره هایی است که هر گره حاوی یک فیلد داده و یک مرجع (پیوند) به گره بعدی در لیست است. در سی شارپ، LinkedList یا لیست پیوندی یک نوع مجموعه جنریک است.

2٬046 0 1401/08/13

Garbage Collection در دات نت

به طور کلی، Garbage Collection (GC) یا جمع آوری زباله در .Net چیزی نیست جز به دست آوردن مجدد حافظه اختصاص داده شده به اشیایی که در حال حاضر در هیچ بخشی از برنامه ما استفاده نمی شوند. ما در این مقاله Garbage Collection را در سی شارپ بررسی خواهیم کرد.

2٬838 5 1401/03/30

.NET Core چیست؟

.Net (با تلفظ «دات نت») یک چارچوب نرم افزاری کامپیوتری مدیریت شده رایگان و منبع باز برای سیستم عامل های ویندوز، لینوکس و macOS است. این پروژه در درجه اول توسط کارمندان مایکروسافت از طریق دات نت توسعه یافته و تحت مجوز MIT منتشر شده است.

2٬587 2 1401/03/16

پشته(Stack) در سی شارپ

پشته یا Stack در سی شارپ یک نوع خطی از ساختار داده است که قادر به ذخیره اشیاء است. پشته یک ساختار داده LIFO یا Last-In-First-Out است، به این معنی که آخرین موردی که در پشته قرار می گیرد اولین موردی است که از پشته خارج می شود.

2٬187 0 1401/03/09

صف (Queue) در سی شارپ

صف (Queue) در سی شارپ یک نوع خطی از ساختار داده است که قادر به ذخیره اشیاء است. Queue یک ساختار داده first-in-first-out یا FIFO است که به این معنی است که اولین مورد اضافه شده به صف اولین موردی است که حذف می شود.

2٬162 0 1401/02/30

تفاوت Hashtable و Dictionary در سی شارپ

در سی شارپ از Hashtable و Dictionary می توان برای ذخیره مجموعه‌ای از داده‌ها، شبیه به List معمولی استفاده کرد. با این تفاوت که Hashtable و Dictionary عناصر را به عنوان جفت Key/Value ذخیره می کنند.در این مقاله به تفاوت های Hashtable و Dictionary پرداخته شده است.

1٬843 1 1401/02/23

Dictionary در سی شارپ

در سی شارپ از دیکشنری ها (Dictionary) می‌توان برای ذخیره مجموعه‌ای از داده‌ها، شبیه به List معمولی استفاده کرد. تفاوت اصلی این است که یک Dictionary می تواند عناصر را به عنوان جفت Key/Value ذخیره کند.Key ها باید منحصر به فرد و نمی توانند null باشند. Value ها می توانند تکراری یا null باشند.

2٬249 3 1401/02/17

Hashtable در سی شارپ

از Hashtable می‌توان برای ذخیره مجموعه‌ای از داده‌ها، شبیه به List معمولی استفاده کرد. تفاوت اصلی این است که یک Hashtable می تواند عناصر را به عنوان جفت Key/Value به عنوان جایگزینی برای استفاده از Index ذخیره کند.

1٬721 5 1401/02/14

Redirect درخواست (ریدایرکت) در asp.net core

در برنامه های ASP.NET Core برای تغییر مسیر(ریدایرکت) و Redirect به یک URL خاص روش های مختلفی وجود دارد. در این مقاله با این تکنیک ها و کدهای مورد نیاز برای تغییر مسیر یک درخواست در ASP.NET Core آشنا می شویم.

2٬562 5 1401/02/12

تبدیل enum به لیست انتخابی در asp.net core

در این آموزش ما بوسیله Reflection ها در سی شارپ و asp.net core یک enum را به لیست انتخابی یا SelectListItem تبدیل خواهیم کرد و بوسیله تگ select در بوت استرپ 5 نمایش می دهیم.

1٬753 3 1401/02/03

نحوه ارسال ایمیل در asp و c#

امروزه ارسال ایمیل به امری ضروری در پروژه های وب تبدیل شده است.از ارسال ایمیل در asp می توان در بخش های تایید حساب کاربری،بازیابی رمز عبور،ایمیل مارکتینگ،ارسال خبرنامه و ... استفاده نمود.در این آموزش نحوه ارسال ایمیل در asp core و سی شارپ پیاده سازی گردیده است.

2٬582 5 1401/02/03
نظرات

برای ثبت نظر باید در سایت ثبت نام یا ورود نمایید