public SendGridBinding(ParameterInfo parameter, SendGridAttribute attribute, SendGridConfiguration config, BindingProviderContext context)
            {
                _parameter = parameter;
                _attribute = attribute;
                _config = config;

                _sendGrid = new Web(_config.ApiKey);

                if (!string.IsNullOrEmpty(_attribute.To))
                {
                    _toFieldBinding = new BindablePath(_attribute.To);
                    _toFieldBinding.ValidateContractCompatibility(context.BindingDataContract);
                }

                if (!string.IsNullOrEmpty(_attribute.Subject))
                {
                    _subjectFieldBinding = new BindablePath(_attribute.Subject);
                    _subjectFieldBinding.ValidateContractCompatibility(context.BindingDataContract);
                }

                if (!string.IsNullOrEmpty(_attribute.Text))
                {
                    _textFieldBinding = new BindablePath(_attribute.Text);
                    _textFieldBinding.ValidateContractCompatibility(context.BindingDataContract);
                }
            }
        private static bool CanBind(BindingProviderContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            // first, verify the file path binding (if it contains binding parameters)
            ParameterInfo parameter = context.Parameter;
            FileAttribute attribute = parameter.GetCustomAttribute<FileAttribute>(inherit: false);
            BindablePath path = new BindablePath(attribute.Path);
            path.ValidateContractCompatibility(context.BindingDataContract);

            // next, verify that the type is one of the types we support
            IEnumerable<Type> types = StreamValueBinder.SupportedTypes.Union(new Type[] { typeof(FileStream) });
            return ValueBinder.MatchParameterType(parameter, types);
        }
        public Task<IValueProvider> BindAsync(BindingContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            FileInfo fileInfo = null;
            if (context != null)
            {
                BindablePath path = new BindablePath(_attribute.Path);
                string boundFileName = path.Bind(context.BindingData);
                string filePath = Path.Combine(_config.RootPath, boundFileName);
                fileInfo = new FileInfo(filePath);
            }

            return BindAsync(fileInfo, context.ValueContext);
        }