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.