Junior — Middle
Aké prístupy a techniky použijete pri vytváraní vlastného kontajnera na injekciu závislostí?
sobes.tech AI
Odpoveď od AI
Pri vytváraní vlastného kontajnera na injekciu závislostí je potrebné zvážiť nasledujúce prístupy a techniky:
- Registrácia závislostí: implementujte metódy na registráciu typov a ich implementácií, napríklad s rôznymi životnými cyklami (singleton, transient).
- Riešenie závislostí: kontajner by mal byť schopný vytvárať objekty, automaticky riešiť ich závislosti cez konštruktor (injektáž cez konštruktor).
- Rekurzívne riešenie: pri vytváraní objektu by mal kontajner rekurzívne vytvárať všetky potrebné závislosti.
- Spracovanie cyklických závislostí: zabezpečiť ochranu pred nekonečnou rekurziou.
- Konfigurácia: možnosť konfigurovať závislosti cez kód alebo konfiguračné súbory.
Príklad zjednodušeného kontajnera v C#:
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($"Služba {serviceType.Name} nie je zaregistrovaná");
var implementationType = _registrations[serviceType];
var constructor = implementationType.GetConstructors().First();
var parameters = constructor.GetParameters()
.Select(p => Resolve(p.ParameterType))
.ToArray();
return Activator.CreateInstance(implementationType, parameters);
}
}
Tento kontajner umožňuje registrovať závislosti a automaticky vytvárať objekty s ich závislosťami.