هدف از بوجود اومدن DI اینه که بجای اینکه یک object تمام dependency هاشو خودش مدیریت کنه ما این کار رو به عهده DI میسپاریم
ما یک DI Container داریم که وظیفش مدیریت کردن طول عمر Object ها و Dependency هاشه که با register کردن service ها و مدیریت طول عمر object ها این مشکلات رو هندل میکنه. زمانی که شما یک instance از اون Service نیاز داری با صدا زدن اینترفیس مربوطه از اون Object استفاده میکنه.
بصورت کلی سه نوع lifeTime برای رجیستر کردن Object ها وجود داره
AddScoped(IService,Service);
AddTransient(IService,Service);
AddSingleTone(Isevice,Service);
که به توضیح هر کدوم میپردازیم
AddScoped :
در این متد به صورت Scope یک Object رو در Container رجیستر میکند
حالا ویژگی هاش چیه
زمانی که یک Instance از اون Object ساخته میشه دقت کنید اون instance استفاده میشه تا زمانی که یک Request جدید توسط یه client زده بشه یک instance جدید ساخته میشه
AddTransient :
فرقش با AddScoped اینه که هر باری که شما نیاز به اون instance داشته باشی یدونه جدید میسازه
AddSingleTon :
یک instance بصورت Global ساخته میشه و تو کل application فقط از همون instance استفاده میشه.
نکته ای که وجود داره اینه که در رجیستر کردن سرویس های مهم در اپلیکیشن خیلی به lifeTime اون توجه داشته باشید منظور از سرویس های مهم در برای مثال رجیستر کردن DBContext که مربوط به دیتابیس شماست و غیره .
کتابخانه های معروفی برای رجیستر کردن سرویس ها وجود داره مثل AutoFac و غیره ولی کتابخانه اصلی DI خود مایکروسافت هم کامله و میشه به راحتی نصب و ازش استفاده کنید