Singleton در مقابل Scoped
Singleton فقط یک بار در طول عمر برنامه ساخته میشود، اما Scoped در هر Request یک نمونه جدید ایجاد میکند.
| ویژگی | Singleton | Scoped |
|---|---|---|
| طول عمر | کل برنامه | هر Request |
| تعداد نمونه | یک | یک در هر Request |
| مناسب DbContext | خیر | بله |
| مصرف حافظه | کمتر | متوسط |
| Thread Safety | باید رعایت شود | کمتر مسئلهساز است |
کِی از Singleton استفاده کنیم؟
برای سرویسهای Stateless مانند Cache یا Configuration.
کِی از Scoped استفاده کنیم؟
برای سرویسهایی که به DbContext وابسته هستند.
مثال Singleton
builder.Services .AddSingleton<ICacheService, CacheService>();
مثال Scoped
builder.Services .AddScoped<IUserService, UserService>();
اشتباه رایج
تزریق Scoped داخل Singleton.
جمعبندی
اکثر سرویسهای Business در ASP.NET Core باید Scoped باشند.
