Sobes.tech
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.