public object Resolve(IRegistration registration) { switch (registration.Lifetime) { case Lifetime.Transient: return(registration.SpawnInstance(this)); case Lifetime.Singleton: if (Parent is null) { return(Root.Resolve(registration)); } if (!registry.Exists(registration.ImplementationType)) { return(Parent.Resolve(registration)); } return(CreateTrackedInstance(registration)); case Lifetime.Scoped: return(CreateTrackedInstance(registration)); default: throw new ArgumentOutOfRangeException(); } }