Sobes.tech
Junior — Middle

შესაძლებელია ერთ კონტეინერში ერთ ინტერფეისის ერთზე მეტი რეალიზაციის რეგისტრაცია?

sobes.tech AI

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

დიახ, C#-ის დამოკიდებულების ინექციის (DI) კონტეინერებში შესაძლებელია ერთ ინტერფეისზე რამდენიმე რეალიზაციის რეგისტრაცია. ეს ჩვეულებრივ კეთდება მაშინ, როდესაც საჭიროა სხვადასხვა ქცევის ვარიანტები, რომლებიც კონტექსტის მიხედვით შეიძლება შეირჩეს.

მაგალითად, Microsoft.Extensions.DependencyInjection-ში შეგიძლიათ რეგისტრაცია ასე:

services.AddTransient<IService, ServiceImplementationA>();
services.AddTransient<IService, ServiceImplementationB>();

როდესაც მოთხოვნაა IEnumerable<IService>, კონტეინერი დააბრუნებს ყველა რეგისტრირებულ რეალიზაციას. თუ მოთხოვნაა მხოლოდ IService, დაბრუნდება ბოლო რეგისტრირებული რეალიზაცია (ეს დამოკიდებულია კონკრეტულ DI კონტეინერზე).

სწორი რეალიზაციის არჩევისთვის ხშირად გამოიყენება სახელოვნად რეგისტრაციები ან ფაბრიკები, ან ინექცირებულია IEnumerable<IService>, და პროგრამულად ირჩევა საჭირო რეალიზაცია.