public object GetService(Type serviceType) { if (serviceType == null) { return(null); } if (IServiceProviderType.Equals(serviceType)) { return(this); } ServiceDescriptor serviceDescriptor = serviceCollection.GetDescriptor(serviceType); string typeName = serviceType.FullName; switch (serviceDescriptor.Lifetime) { case ServiceLifetime.Singleton: case ServiceLifetime.Scoped: instances.GetOrInsert(serviceType, out object instance, type => serviceDescriptor.CreateInstance(this)); return(instance); case ServiceLifetime.Transient: return(serviceDescriptor.CreateInstance(this)); default: throw new NotImplementedException(); } }