ما در Asp .NET Core و Blazor يك سيستم تزريق وابستگى (Dependency injection ) داريم.كار اين تزريق وابستگى اين است كه جاهايى كه ما نياز به يك نمونه اى جديد از يك شئ داريم، اين كار رو برامون انجام ميدن با تنظيماتى كه بر روى اين ها اعمال ميكنيم.
حالا ما سه نوع حالت تزريق وابستگى داريم براى ايجاد يك نمونه جديد از يك شئ.
١.حالت Singleton : در اين حالت، همون طور كه از اسمش پيداس براى همه ركوئست ها فقط و فقط يك نمونه ايجاد ميكند و در تمام طول زمان اجرا ركوئست ها از همان نمونه استفاده مي كند.
٢.حالت Scoped : در اين حالت براى هر ركوئست يك نمونه جديد از آن شئ براى ما ايجاد ميكند و در طول زمان اجرا اين ركوئست از همان شئ توليد شده استفاده ميكند.
با مثال زير ميتونيد اين موضوع رو بهتر درك كنيد.
به طور مثال فرض كنيم يك ركوئست در حال انجام است و براى اتمام كار خود نياز دارد كه ٣ تا سرويس را صدا بزند و در اين ٣ سرويس هم كلاسى استفاده شده با اسم A، پس ٣ سرويس داريم كه در هر كدام يك كلاس A استفاده شده.
ركوئست وارد سرويس اول ميشه و يك نمونه از كلاس A ميسازه و حالا نكته اينجا هست كه موقعى كه ميره سراغ سرويس ٢ ديگه نمياد از كلاس A يك نمونه جديد بسازه و از همون نمونه اى كه قبلا ساخته مياد استفاده ميكنه.
٣.حالت Transient : اين حالت خيلى شبيه به حالت Scoped هست با اين تفاوت كه ركوئست وارد سرويس ٢ ميشه و ميرسه به جايى كه بايد يك نمونه از كلاس A داشته باشه، ديگه نمياد از همون نمونه قبلى استفاده كنه (كارى كه در Scoped انجام ميشد) بلكه مياد يك نمونه جديد ميسازه.
پس حالت Transient اصلا براش فرقى نميكنه كه آيا قبلا اين كلاس نمونه سازى شده يا نه در هر جايى كه ازش خواستيم تا تزريق وابستگى رو انجام بده، يك شئ جديد رو نمونه سازى ميكنه و تحويل ميده بدون اين كه چك كنه آيا قبلا وجود داشته يا نه.
هر جا هم كلمه DI رو ديديد ياد اين مفاهيم بيوفتيد.