public Task <IValueProvider> BindAsync(BindingContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            TraceWriter trace = context.Trace;

            // If logger functionality is enabled, wrap an ILogger
            if (_loggerFactory != null)
            {
                ILogger logger = _loggerFactory.CreateLogger(LogCategories.Function);
                trace = new CompositeTraceWriter(new[] { trace, new LoggerTraceWriter(context.Trace.Level, logger) }, null, context.Trace.Level);
            }

            object tracer = null;

            if (_parameter.ParameterType == typeof(TraceWriter))
            {
                tracer = trace;
            }
            else
            {
                // bind to an adapter
                tracer = TextWriterTraceAdapter.Synchronized(trace);
            }

            return(BindAsync(tracer, context.ValueContext));
        }
        public Task <IValueProvider> BindAsync(BindingContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            ILogger     logger = _loggerFactory.CreateLogger(LogCategories.CreateFunctionUserCategory(context.ValueContext.FunctionContext.MethodName));
            TraceWriter trace  = new LoggerTraceWriter(logger);

            object tracer = trace;

            if (_parameter.ParameterType == typeof(TextWriter))
            {
                // bind to an adapter
                tracer = TextWriterTraceAdapter.Synchronized(trace);
            }

            return(BindAsync(tracer, context.ValueContext));
        }