Junior — Middle
Qanday yondashuvlar va texnikalarni qo'llaysiz o'z konteyneringizni yaratishda bog'liqliklarni kiritish uchun?
sobes.tech AI
AIdan javob
O'zining dependency injection konteynerini yaratishda quyidagi yondashuvlar va texnikalarni hisobga olish muhim:
- Dependensiyalarni ro'yxatdan o'tkazish: turlar va ularning implementatsiyalarini ro'yxatdan o'tkazish uchun metodlarni amalga oshirish, masalan, turli hayot aylanishlari bilan (singleton, transient).
- Dependensiyalarni hal qilish: konteyner obyektlarni yaratishi va ularning dependensiyalarini avtomatik ravishda konstruktor orqali hal qilishi kerak (konstruktor in'ektsiyasi).
- Rekursiv hal qilish: obyekt yaratishda, konteyner barcha zarur dependensiyalarni rekursiv ravishda yaratishi kerak.
- Tsiklik dependensiyalarni boshqarish: cheksiz rekursiyadan himoya qilish.
- Konfiguratsiya: kod yoki konfiguratsiya fayllari orqali dependensiyalarni sozlash imkoniyati.
C# tilida soddalashtirilgan konteyner misoli:
public class SimpleContainer
{
private readonly Dictionary<Type, Type> _registrations = new();
public void Register<TService, TImplementation>()
{
_registrations[typeof(TService)] = typeof(TImplementation);
}
public TService Resolve<TService>()
{
return (TService)Resolve(typeof(TService));
}
private object Resolve(Type serviceType)
{
if (!_registrations.ContainsKey(serviceType))
throw new Exception($"Xizmat {serviceType.Name} ro'yxatdan o'tmagan");
var implementationType = _registrations[serviceType];
var constructor = implementationType.GetConstructors().First();
var parameters = constructor.GetParameters()
.Select(p => Resolve(p.ParameterType))
.ToArray();
return Activator.CreateInstance(implementationType, parameters);
}
}
Ushbu konteyner dependensiyalarni ro'yxatdan o'tkazish va ularning dependensiyalarini avtomatik ravishda yaratish imkonini beradi.