Sobes.tech
Junior — Middle

როგორ განისაზღვრება ობიექტის არსებობის ვადა მისი რეგისტრაციის შემდეგ დამოკიდებულების ინექციის კონტეინერში?

sobes.tech AI

პასუხი AI-სგან

ობიექტის არსებობის ვადა (lifetime) განსაზღვრავს მის სიცოცხლის ციკლს (lifetime), რომელიც რეგისტრაციის დროს נקבע.

C#-ში ძირითადი სიცოცხლის ციკლის ვარიანტები (მაგალითად, Microsoft.Extensions.DependencyInjection-ში):

  • Transient: ახალი ეგზემპლარი შეიქმნება ყოველ მოთხოვნაზე.
  • Scoped: ერთი ეგზემპლარი შეიქმნება სესიისთვის (მაგალითად, ვებ-აპლიკაციაში HTTP მოთხოვნისთვის).
  • Singleton: ერთი ეგზემპლარი შეიქმნება პირველ მოთხოვნაზე და სიცოცხლის ბოლომდე იქნება აქტიური.

მაგალითი სხვადასხვა სიცოცხლის ხანგრძლივობის სერვისის რეგისტრაციის:

services.AddTransient<IMyService, MyService>(); // ახალი ობიექტი ყოველ ჯერზე
services.AddScoped<IMyService, MyService>();   // ერთი ობიექტი სესიის/მოთხოვნისთვის
services.AddSingleton<IMyService, MyService>(); // ერთი ობიექტი მთელი მუშაობის განმავლობაში

ამიტომ, ობიექტის არსებობის ხანგრძლივობა დამოკიდებულია რეგისტრაციის დროს არჩეულ სიცოცხლის ციკლზე DI კონტეინერში.