public StringToServiceBusEntityConverter(ServiceBusAccount account, IBindableServiceBusPath defaultPath, EntityType entityType, MessagingProvider messagingProvider)
 {
     _account           = account;
     _defaultPath       = defaultPath;
     _entityType        = entityType;
     _messagingProvider = messagingProvider;
 }
Esempio n. 2
0
        public Task <IBinding> TryCreateAsync(BindingProviderContext context)
        {
            ParameterInfo       parameter           = context.Parameter;
            ServiceBusAttribute serviceBusAttribute = parameter.GetCustomAttribute <ServiceBusAttribute>(inherit: false);

            if (serviceBusAttribute == null)
            {
                return(Task.FromResult <IBinding>(null));
            }

            string queueOrTopicName      = Resolve(serviceBusAttribute.QueueOrTopicName);
            IBindableServiceBusPath path = BindableServiceBusPath.Create(queueOrTopicName);

            path.ValidateContractCompatibility(context.BindingDataContract);

            IArgumentBinding <ServiceBusEntity> argumentBinding = _innerProvider.TryCreate(parameter);

            if (argumentBinding == null)
            {
                throw new InvalidOperationException("Can't bind ServiceBus to type '" + parameter.ParameterType + "'.");
            }

            string            connectionString = _accountProvider.ConnectionString;
            ServiceBusAccount account          = ServiceBusAccount.CreateFromConnectionString(connectionString);

            IBinding binding = new ServiceBusBinding(parameter.Name, argumentBinding, account, path);

            return(Task.FromResult(binding));
        }
Esempio n. 3
0
        public void Bind_IfNullBindingData_Throws()
        {
            const string            queueOrTopicNamePattern = "queue-{name}-with-{parameter}";
            IBindableServiceBusPath path = CreateProductUnderTest(queueOrTopicNamePattern);

            Assert.Throws <ArgumentNullException>(() => path.Bind(null), "bindingData");
        }
        public Task <IBinding> TryCreateAsync(BindingProviderContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            ParameterInfo parameter = context.Parameter;
            var           attribute = TypeUtility.GetResolvedAttribute <ServiceBusAttribute>(parameter);

            if (attribute == null)
            {
                return(Task.FromResult <IBinding>(null));
            }

            string queueOrTopicName      = Resolve(attribute.QueueOrTopicName);
            IBindableServiceBusPath path = BindableServiceBusPath.Create(queueOrTopicName);

            ValidateContractCompatibility(path, context.BindingDataContract);

            IArgumentBinding <ServiceBusEntity> argumentBinding = InnerProvider.TryCreate(parameter);

            if (argumentBinding == null)
            {
                throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, "Can't bind ServiceBus to type '{0}'.", parameter.ParameterType));
            }

            attribute.Connection = Resolve(attribute.Connection);
            ServiceBusAccount account = new ServiceBusAccount(_options, _configuration, attribute);

            IBinding binding = new ServiceBusBinding(parameter.Name, argumentBinding, account, _options, path, attribute, _messagingProvider);

            return(Task.FromResult <IBinding>(binding));
        }
 public StringToServiceBusEntityConverter(ServiceBusAccount account, IBindableServiceBusPath defaultPath, AccessRights accessRights, EntityType entityType)
 {
     _account      = account;
     _defaultPath  = defaultPath;
     _accessRights = accessRights;
     _entityType   = entityType;
 }
Esempio n. 6
0
 public StringToServiceBusEntityConverter(ServiceBusAttribute attribute, IBindableServiceBusPath defaultPath, MessagingProvider messagingProvider, ServiceBusClientFactory clientFactory)
 {
     _attribute         = attribute;
     _defaultPath       = defaultPath;
     _entityType        = _attribute.EntityType;
     _messagingProvider = messagingProvider;
     _clientFactory     = clientFactory;
 }
Esempio n. 7
0
        public void Create_IfParameterizedPattern_ReturnsNotBoundPath()
        {
            const string queueOrTopicNamePattern = "queue-{name}-with-{parameter}";

            IBindableServiceBusPath path = BindableServiceBusPath.Create(queueOrTopicNamePattern);

            Assert.NotNull(path);
            Assert.AreEqual(queueOrTopicNamePattern, path.QueueOrTopicNamePattern);
            Assert.False(path.IsBound);
        }
Esempio n. 8
0
 public ServiceBusBinding(string parameterName, IArgumentBinding <ServiceBusEntity> argumentBinding, ServiceBusAccount account, IBindableServiceBusPath path, AccessRights accessRights)
 {
     _parameterName   = parameterName;
     _argumentBinding = argumentBinding;
     _account         = account;
     _namespaceName   = ServiceBusClient.GetNamespaceName(account);
     _path            = path;
     _accessRights    = accessRights;
     _converter       = CreateConverter(account, path, accessRights);
 }
 public ServiceBusBinding(string parameterName, IArgumentBinding <ServiceBusEntity> argumentBinding, ServiceBusAccount account, IBindableServiceBusPath path, ServiceBusAttribute attr, MessagingProvider messagingProvider)
 {
     _parameterName     = parameterName;
     _argumentBinding   = argumentBinding;
     _account           = account;
     _path              = path;
     _entityType        = attr.EntityType;
     _messagingProvider = messagingProvider;
     _converter         = new OutputConverter <string>(new StringToServiceBusEntityConverter(account, _path, _entityType, _messagingProvider));
 }
 public ServiceBusBinding(string parameterName, IArgumentBinding<ServiceBusEntity> argumentBinding, ServiceBusAccount account, IBindableServiceBusPath path, AccessRights accessRights)
 {
     _parameterName = parameterName;
     _argumentBinding = argumentBinding;
     _account = account;
     _namespaceName = ServiceBusClient.GetNamespaceName(account);
     _path = path;
     _accessRights = accessRights;
     _converter = CreateConverter(account, path, accessRights);
 }
Esempio n. 11
0
        public void Create_IfNonParameterizedPattern_ReturnsBoundPath()
        {
            const string queueOrTopicNamePattern = "queue-name-with-no-parameters";

            IBindableServiceBusPath path = BindableServiceBusPath.Create(queueOrTopicNamePattern);

            Assert.NotNull(path);
            Assert.AreEqual(queueOrTopicNamePattern, path.QueueOrTopicNamePattern);
            Assert.True(path.IsBound);
        }
 public ServiceBusBinding(string parameterName, IArgumentBinding <ServiceBusEntity> argumentBinding, ServiceBusAccount account, IBindableServiceBusPath path, ServiceBusAttribute attr)
 {
     _parameterName   = parameterName;
     _argumentBinding = argumentBinding;
     _account         = account;
     _namespaceName   = ServiceBusClient.GetNamespaceName(account);
     _path            = path;
     _accessRights    = attr.Access;
     _entityType      = attr.EntityType;
     _converter       = new OutputConverter <string>(
         new StringToServiceBusEntityConverter(account, _path, _accessRights, _entityType));
 }
Esempio n. 13
0
        public void Bind_IfNotNullBindingData_ReturnsResolvedQueueName()
        {
            const string queueOrTopicNamePattern = "queue-{name}-with-{parameter}";
            var          bindingData             = new Dictionary <string, object> {
                { "name", "name" }, { "parameter", "parameter" }
            };
            IBindableServiceBusPath path = CreateProductUnderTest(queueOrTopicNamePattern);

            string result = path.Bind(bindingData);

            Assert.AreEqual("queue-name-with-parameter", result);
        }
 public ServiceBusBinding(
     string parameterName,
     IArgumentBinding <ServiceBusEntity> argumentBinding,
     IBindableServiceBusPath path,
     ServiceBusAttribute attribute,
     MessagingProvider messagingProvider,
     ServiceBusClientFactory clientFactory)
 {
     _parameterName     = parameterName;
     _argumentBinding   = argumentBinding;
     _path              = path;
     _messagingProvider = messagingProvider;
     _clientFactory     = clientFactory;
     _attribute         = attribute;
     _converter         = new OutputConverter <string>(new StringToServiceBusEntityConverter(_attribute, _path, _messagingProvider, _clientFactory));
 }
        private static void ValidateContractCompatibility(IBindableServiceBusPath path, IReadOnlyDictionary<string, Type> bindingDataContract)
        {
            if (path == null)
            {
                throw new ArgumentNullException("path");
            }

            IEnumerable<string> parameterNames = path.ParameterNames;
            if (parameterNames != null)
            {
                foreach (string parameterName in parameterNames)
                {
                    if (bindingDataContract != null && !bindingDataContract.ContainsKey(parameterName))
                    {
                        throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, "No binding parameter exists for '{0}'.", parameterName));
                    }
                }
            }
        }
        private static void ValidateContractCompatibility(IBindableServiceBusPath path, IReadOnlyDictionary <string, Type> bindingDataContract)
        {
            if (path == null)
            {
                throw new ArgumentNullException("path");
            }

            IEnumerable <string> parameterNames = path.ParameterNames;

            if (parameterNames != null)
            {
                foreach (string parameterName in parameterNames)
                {
                    if (bindingDataContract != null && !bindingDataContract.ContainsKey(parameterName))
                    {
                        throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, "No binding parameter exists for '{0}'.", parameterName));
                    }
                }
            }
        }
Esempio n. 17
0
        public Task <IBinding> TryCreateAsync(BindingProviderContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            ParameterInfo       parameter = context.Parameter;
            ServiceBusAttribute attribute = parameter.GetCustomAttribute <ServiceBusAttribute>(inherit: false);

            if (attribute == null)
            {
                return(Task.FromResult <IBinding>(null));
            }

            string queueOrTopicName      = Resolve(attribute.QueueOrTopicName);
            IBindableServiceBusPath path = BindableServiceBusPath.Create(queueOrTopicName);

            ValidateContractCompatibility(path, context.BindingDataContract);

            IArgumentBinding <ServiceBusEntity> argumentBinding = InnerProvider.TryCreate(parameter);

            if (argumentBinding == null)
            {
                throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, "Can't bind ServiceBus to type '{0}'.", parameter.ParameterType));
            }

            string            connectionName = ServiceBusAccount.GetAccountOverrideOrNull(context.Parameter);
            ServiceBusAccount account        = new ServiceBusAccount
            {
                MessagingFactory = _config.MessagingProvider.CreateMessagingFactory(queueOrTopicName, connectionName),
                NamespaceManager = _config.MessagingProvider.CreateNamespaceManager(connectionName)
            };

            IBinding binding = new ServiceBusBinding(parameter.Name, argumentBinding, account, path, attribute.Access);

            return(Task.FromResult <IBinding>(binding));
        }
Esempio n. 18
0
 public StringToServiceBusEntityConverter(ServiceBusAccount account, IBindableServiceBusPath defaultPath)
 {
     _account     = account;
     _defaultPath = defaultPath;
 }
 private static IAsyncObjectToTypeConverter<ServiceBusEntity> CreateConverter(ServiceBusAccount account, IBindableServiceBusPath queueOrTopicName, AccessRights accessRights)
 {
     return new OutputConverter<string>(new StringToServiceBusEntityConverter(account, queueOrTopicName, accessRights));
 }
Esempio n. 20
0
 private static IAsyncObjectToTypeConverter <ServiceBusEntity> CreateConverter(ServiceBusAccount account, IBindableServiceBusPath queueOrTopicName, AccessRights accessRights)
 {
     return(new OutputConverter <string>(new StringToServiceBusEntityConverter(account, queueOrTopicName, accessRights)));
 }