public void Populate(IServiceCollection serviceCollection, LifeTime lifeTime, bool includeOpenGenericWireup)
        {
            foreach (var abstraction in _typeCache.GetTypes(AutoType.Abstraction))
            {
                var types = _implementationsFinder.FindImplemenationsOf(abstraction);
                if (!includeOpenGenericWireup && types.All(x => x.IsGenericType))
                {
                    return;
                }

                var dependencyType = types.FirstOrDefault(type => _serviceTypeNameFilter.IsMatch(abstraction, type));

                switch (lifeTime)
                {
                case LifeTime.Singleton:
                    RegisterDependency(serviceCollection.AddSingleton, abstraction, dependencyType);
                    break;

                case LifeTime.Transient:
                    RegisterDependency(serviceCollection.AddTransient, abstraction, dependencyType);
                    break;
                }
            }
        }