/// <summary>
        /// If this is specified then it will take precedence over any behaviour specified through Ignore or SetWeightMultiplier - these will be ignored
        /// </summary>
        public AutomatedIndexGeneratorFactoryBuilder <TSource, TKey> SetTokenWeightDeterminer(
            AutomatedIndexGeneratorFactory <TSource, TKey> .WeightDeterminerGenerator weightDeterminerGenerator)
        {
            if (weightDeterminerGenerator == null)
            {
                throw new ArgumentNullException("weightDeterminerGenerator");
            }

            return(new AutomatedIndexGeneratorFactoryBuilder <TSource, TKey>(
                       _keyRetrieverOverride,
                       _keyComparerOverride,
                       _stringNormaliserOverride,
                       _tokenBreaker,
                       _weightedEntryCombinerOverride,
                       _propertyWeightAppliers,
                       weightDeterminerGenerator,
                       _optionalPropertyForFirstContentRetriever,
                       _captureSourceLocations,
                       _loggerOverride
                       ));
        }
 private AutomatedIndexGeneratorFactoryBuilder(
     Func <TSource, TKey> keyRetrieverOverride,
     IEqualityComparer <TKey> keyComparerOverride,
     IStringNormaliser stringNormaliserOverride,
     ITokenBreaker tokenBreaker,
     IndexGenerator.WeightedEntryCombiner weightedEntryCombinerOverride,
     NonNullImmutableList <IModifyMatchWeights> propertyWeightAppliers,
     AutomatedIndexGeneratorFactory <TSource, TKey> .WeightDeterminerGenerator tokenWeightDeterminerGeneratorOverride,
     PropertyInfo optionalPropertyForFirstContentRetriever,
     bool captureSourceLocations,
     ILogger loggerOverride)
 {
     _keyRetrieverOverride                     = keyRetrieverOverride;
     _keyComparerOverride                      = keyComparerOverride;
     _stringNormaliserOverride                 = stringNormaliserOverride;
     _tokenBreaker                             = tokenBreaker ?? throw new ArgumentNullException(nameof(tokenBreaker));
     _weightedEntryCombinerOverride            = weightedEntryCombinerOverride;
     _propertyWeightAppliers                   = propertyWeightAppliers ?? throw new ArgumentNullException(nameof(propertyWeightAppliers));
     _tokenWeightDeterminerGeneratorOverride   = tokenWeightDeterminerGeneratorOverride;
     _optionalPropertyForFirstContentRetriever = optionalPropertyForFirstContentRetriever;
     _captureSourceLocations                   = captureSourceLocations;
     _loggerOverride                           = loggerOverride;
 }