Service Lifetime در .NET
هنگام ثبت سرویسها در Dependency Injection باید مشخص کنیم که نمونههای آن چگونه و چه زمانی ایجاد شوند. به این رفتار Service Lifetime گفته میشود.
انواع Lifetime
- Transient : در هر بار درخواست، یک نمونه جدید ایجاد میشود.
- Scoped : در طول یک Request فقط یک نمونه ایجاد میشود.
- Singleton : تنها یک نمونه در طول اجرای برنامه ایجاد میشود.
ثبت سرویسها
builder.Services.AddTransient<IEmailService, EmailService>();
builder.Services.AddScoped<IUserService, UserService>();
builder.Services.AddSingleton<ICacheService, CacheService>();
چه زمانی از هر کدام استفاده کنیم؟
- Transient برای سرویسهای سبک و بدون State
- Scoped برای سرویسهای مرتبط با هر درخواست مانند DbContext
- Singleton برای سرویسهای اشتراکی مانند Cache یا Configuration
نکته مهم
نباید یک سرویس Scoped را داخل یک Singleton تزریق کنید؛ زیرا باعث ایجاد خطا در زمان اجرای برنامه خواهد شد.
جمعبندی
انتخاب صحیح Service Lifetime نقش مهمی در عملکرد، مصرف حافظه و پایداری برنامه دارد و یکی از مفاهیم پایهای Dependency Injection محسوب میشود.