Sobes.tech
Junior — Middle

Kuras pieejas un tehnikas jūs piemērosiet, izveidojot savu konteineru atkarību injekcijai?

sobes.tech AI

Atbilde no AI

Veidojot savu atkarību injekcijas konteineru, ir jāņem vērā šādi pieejas un tehnika:

  • Atkarību reģistrācija: īstenot metodes tipu un to realizāciju reģistrēšanai, piemēram, ar dažādiem dzīves cikliem (singleton, transient).
  • Atkarību risināšana: konteinerim jāspēj izveidot objektus, automātiski risinot to atkarības caur konstruktoru (konstruktora injekcija).
  • Rekursīva risināšana: izveidojot objektu, konteinerim jāspēj rekursīvi izveidot visas nepieciešamās atkarības.
  • Ciklisks atkarību risinājums: jāparedz aizsardzība pret bezgalīgu rekursiju.
  • Konfigurācija: iespēja konfigurēt atkarības caur kodu vai konfigurācijas failiem.

Piemērs vienkāršota C# konteinerim:

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($"Pakalpojums {serviceType.Name} nav reģistrēts");

        var implementationType = _registrations[serviceType];
        var constructor = implementationType.GetConstructors().First();
        var parameters = constructor.GetParameters()
            .Select(p => Resolve(p.ParameterType))
            .ToArray();

        return Activator.CreateInstance(implementationType, parameters);
    }
}

Šis konteineris ļauj reģistrēt atkarības un automātiski izveidot objektus ar to atkarībām.