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 კონტეინერში.