public static IMemberConfigurator <TContainer, TMember> AddProvider <TContainer, TMember, TAttribute>(
     this IValueProviderConfigurator <IMemberConfigurator <TContainer, TMember>, TMember> configurator,
     Func <AttributeValueProviderContext <TMember, TAttribute>, TMember> valueProviderFunc)
     where TAttribute : Attribute
 {
     return(configurator.AddProvider(new AttributeFuncProvider <TMember, TAttribute>(valueProviderFunc)));
 }
 /// <summary>
 /// Adds a provider for a property in the chain
 /// </summary>
 /// <typeparam name="TReturn"></typeparam>
 /// <param name="configurator">The value configurator</param>
 /// <param name="reflectedType">the real type to create for the reflective value provider.</param>
 /// <param name="valueProviderFunc">the func generating the value</param>
 public static TReturn AddProvider <TReturn> (
     this IValueProviderConfigurator <TReturn, object> configurator,
     Type reflectedType,
     Func <ValueProviderContext <object>, object> valueProviderFunc)
 {
     return(configurator.AddProvider(new ReflectiveFuncProvider(reflectedType, valueProviderFunc)));
 }
 /// <summary>
 /// Adds a provider for a property in the chain
 /// </summary>
 /// <typeparam name="TMember">The type of the property</typeparam>
 /// <typeparam name="TReturn"></typeparam>
 /// <param name="configurator">The value configurator</param>
 /// <param name="valueProviderFunc">the func generating the value</param>
 public static TReturn AddProvider <TReturn, TMember> (
     this IValueProviderConfigurator <TReturn, TMember> configurator,
     Func <ValueProviderContext <TMember>, TMember> valueProviderFunc)
 {
     return(configurator.AddProvider(new FuncProvider <TMember> (valueProviderFunc)));
 }