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();
            }
        }