public IEnumerable <Type> GetDependencies(Type type)
        {
            EnsureNotDisposed();
            if (type.IsDelegate())
            {
                return(Enumerable.Empty <Type>());
            }
            if (!type.IsAbstract)
            {
                var result = dependenciesInjector.GetDependencies(type)
                             .Select(ReflectionHelpers.UnwrapEnumerable)
                             .ToArray();
                if (result.Any())
                {
                    return(result);
                }
            }
            var serviceConstructor = type.GetConstructor();

            if (!serviceConstructor.isOk)
            {
                return(Enumerable.Empty <Type>());
            }
            var typeConfiguration = GetConfigurationWithoutContracts(type);

            return(serviceConstructor.value.GetParameters()
                   .Where(p => typeConfiguration == null || typeConfiguration.GetOrNull(p) == null)
                   .Select(x => x.ParameterType)
                   .Select(ReflectionHelpers.UnwrapEnumerable)
                   .Where(p => GetConfigurationWithoutContracts(p) == null)
                   .Where(IsDependency));
        }