コード例 #1
0
        public Task <IValueProvider> BindAsync(BindingContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            var attribute         = Parameter.GetTableAttribute();
            var resolvedAttribute = new ApiHubTableAttribute(attribute.Connection)
            {
                DataSetName = attribute.DataSetName,
                TableName   = attribute.TableName,
                EntityId    = attribute.EntityId
            };

            if (context.BindingData != null)
            {
                if (_dataSetNameBindingTemplate != null)
                {
                    resolvedAttribute.DataSetName = _dataSetNameBindingTemplate.Bind(context.BindingData);
                }

                if (_tableNameBindingTemplate != null)
                {
                    resolvedAttribute.TableName = _tableNameBindingTemplate.Bind(context.BindingData);
                }

                if (_entityIdBindingTemplate != null)
                {
                    resolvedAttribute.EntityId = _entityIdBindingTemplate.Bind(context.BindingData);
                }
            }

            return(BindAsync(resolvedAttribute));
        }
コード例 #2
0
        public static string GetEntityId(
            this ApiHubTableAttribute attribute,
            TableConfigContext configContext)
        {
            var entityId = configContext.NameResolver.ResolveWholeString(attribute.EntityId);

            return(entityId);
        }
コード例 #3
0
 public TableEntityValueBinder(
     ParameterInfo parameter,
     ApiHubTableAttribute resolvedAttribute,
     TableConfigContext configContext)
 {
     Parameter         = parameter;
     ResolvedAttribute = resolvedAttribute;
     ConfigContext     = configContext;
 }
コード例 #4
0
        private Task <IValueProvider> BindAsync(ApiHubTableAttribute resolvedAttribute)
        {
            var parameterType     = Parameter.ParameterType;
            var valueProviderType = typeof(TableEntityValueBinder <>).MakeGenericType(parameterType);
            var valueProvider     = (IValueProvider)Activator.CreateInstance(
                valueProviderType, Parameter, resolvedAttribute, ConfigContext);

            return(Task.FromResult(valueProvider));
        }
コード例 #5
0
        private Task <IValueProvider> BindAsync(ApiHubTableAttribute resolvedAttribute)
        {
            var entityType        = Parameter.ParameterType.GetGenericArguments().Single();
            var valueProviderType = typeof(TableValueProvider <>).MakeGenericType(entityType);
            var valueProvider     = (IValueProvider)Activator.CreateInstance(
                valueProviderType, Parameter, resolvedAttribute, ConfigContext);

            return(Task.FromResult(valueProvider));
        }
コード例 #6
0
        public static ITableClient GetTableClient(
            this ApiHubTableAttribute attribute,
            TableConfigContext configContext)
        {
            var connection  = configContext.ConnectionFactory.CreateConnection(attribute.Connection);
            var tableClient = connection.CreateTableClient();

            return(tableClient);
        }
コード例 #7
0
        public static ITable <TEntity> GetTableReference <TEntity>(
            this ApiHubTableAttribute attribute,
            TableConfigContext configContext)
            where TEntity : class
        {
            var dataSet   = GetDataSetReference(attribute, configContext);
            var tableName = configContext.NameResolver.ResolveWholeString(attribute.TableName);
            var table     = dataSet.GetTableReference <TEntity>(tableName);

            return(table);
        }
コード例 #8
0
        public static IDataSet GetDataSetReference(
            this ApiHubTableAttribute attribute,
            TableConfigContext configContext)
        {
            var tableClient = GetTableClient(attribute, configContext);
            var dataSetName =
                string.IsNullOrEmpty(attribute.DataSetName)
                    ? null
                    : configContext.NameResolver.ResolveWholeString(attribute.DataSetName);
            var dataSet = tableClient.GetDataSetReference(dataSetName);

            return(dataSet);
        }
コード例 #9
0
        public override async Task BindAsync(BindingContext context)
        {
            var attribute = new ApiHubTableAttribute(Connection)
            {
                DataSetName = BindAndResolve(DataSetName, _dataSetNameBindingTemplate, context),
                TableName   = BindAndResolve(TableName, _tableNameBindingTemplate, context),
                EntityId    = BindAndResolve(EntityId, _entityIdBindingTemplate, context)
            };

            var runtimeContext = new RuntimeBindingContext(attribute);

            if (Access == FileAccess.Read && BindingDirection == BindingDirection.In)
            {
                context.Value = await context.Binder.BindAsync <JObject>(runtimeContext);
            }
            else if (Access == FileAccess.Write && BindingDirection == BindingDirection.Out)
            {
                await BindAsyncCollectorAsync <JObject>(context, runtimeContext);
            }
        }
コード例 #10
0
        public TableBinding(
            ParameterInfo parameter,
            TableConfigContext configContext)
        {
            ValidateParameter(parameter);

            Parameter     = parameter;
            ConfigContext = configContext;

            ApiHubTableAttribute attribute = Parameter.GetTableAttribute();

            if (!string.IsNullOrEmpty(attribute.DataSetName))
            {
                _dataSetNameBindingTemplate = BindingTemplate.FromString(attribute.DataSetName, ignoreCase: true);
            }

            if (!string.IsNullOrEmpty(attribute.TableName))
            {
                _tableNameBindingTemplate = BindingTemplate.FromString(attribute.TableName, ignoreCase: true);
            }
        }
コード例 #11
0
 private static void ValidateContract(ApiHubTableAttribute attribute, INameResolver nameResolver, IReadOnlyDictionary <string, Type> contract)
 {
     ValidateContract(attribute.DataSetName, nameResolver, contract);
     ValidateContract(attribute.TableName, nameResolver, contract);
     ValidateContract(attribute.EntityId, nameResolver, contract);
 }