private object GetOrCreateInstance(Type serviceType, IRegistratedService registration) { if (registration.Lifetime == ServiceLifetime.Singleton && ContainerId != RootContainer.ContainerId) { return(RootContainer.GetService(serviceType)); } if (TryGetSharedInstance(registration.Id, out var sharedInstance)) { return(sharedInstance); } else { if (registration.IsShared) { var instance = CreateInstance(registration); _sharedInstances.TryAdd(registration.Id, instance); return(instance); } else { return(CreateInstance(registration)); } } }