private static IBindingInfoBehaviorSyntax<TSource> WithParameter<TSource, TValue>(this IBuilderSyntax syntax,
     DataConstant<Func<IDataContext, TValue>> constant, Func<LambdaExpression> expression)
 {
     Should.NotBeNull(syntax, nameof(syntax));
     BindingServiceProvider.BindingProvider.BuildParameterFromLambdaExpression(syntax.Builder, expression, constant);
     return syntax.GetOrAddSyntaxBuilder<IBindingInfoBehaviorSyntax<TSource>, object, TSource>();
 }
 private static IBindingInfoBehaviorSyntax <TSource> WithBehaviorInternal <TSource>(this IBuilderSyntax syntax,
                                                                                    IBindingBehavior behavior)
 {
     Should.NotBeNull(syntax, "syntax");
     Should.NotBeNull(behavior, "behavior");
     syntax.Builder.GetOrAddBehaviors().Add(behavior);
     return(syntax.GetOrAddSyntaxBuilder <IBindingInfoBehaviorSyntax <TSource>, object, TSource>());
 }
        private static IBindingInfoBehaviorSyntax <TSource> WithParameter <TSource, TValue>(this IBuilderSyntax syntax,
                                                                                            DataConstant <Func <IDataContext, TValue> > constant, Func <LambdaExpression> expression)
        {
            Should.NotBeNull(syntax, "syntax");
            Func <IDataContext, TValue> value;

            if (typeof(TValue) == typeof(object))
            {
                value = (Func <IDataContext, TValue>)(object) LambdaExpressionToBindingExpressionConverter.ConvertParameter(expression, syntax);
            }
            else
            {
                value = LambdaExpressionToBindingExpressionConverter.ConvertParameter(expression, syntax).CastFunc <TValue>;
            }
            syntax.Builder.AddOrUpdate(constant, value);
            return(syntax.GetOrAddSyntaxBuilder <IBindingInfoBehaviorSyntax <TSource>, object, TSource>());
        }