コード例 #1
0
        public void Configuration_Caches_NotificationHubClients()
        {
            // Arrange
            var config = new NotificationHubsConfiguration
            {
                ConnectionString = "Endpoint=sb://TestNS.servicebus.windows.net/;SharedAccessKeyName=DefaultFullSharedAccessSignature;SharedAccessKey=2XgXnw2bVCd7GT9RPaZ/RandomKey",
                HubName          = "TestHub"
            };
            var attribute = new NotificationHubAttribute();

            config.BindForNotificationHubClient(attribute);

            // Act
            config.BuildFromAttribute(attribute);

            // Assert
            Assert.Equal(1, config.ClientCache.Count);

            // Act
            attribute.HubName = "TestHub2";
            config.BuildFromAttribute(attribute);

            // Assert
            Assert.Equal(2, config.ClientCache.Count);
        }
コード例 #2
0
        internal NotificationHubClient BindForNotificationHubClient(NotificationHubAttribute attribute)
        {
            string resolvedConnectionString       = ResolveConnectionString(attribute.ConnectionStringSetting);
            string resolvedHubName                = ResolveHubName(attribute.HubName);
            INotificationHubClientService service = GetService(resolvedConnectionString, resolvedHubName, attribute.EnableTestSend);

            return(service.GetNotificationHubClient());
        }
コード例 #3
0
        private IAsyncCollector <Notification> BuildFromAttribute(NotificationHubAttribute attribute)
        {
            string resolvedConnectionString = ResolveConnectionString(ConnectionString, attribute.ConnectionString);
            string resolvedHubName          = ResolveHubName(HubName, attribute.HubName);

            INotificationHubClientService service = new NotificationHubClientService(resolvedConnectionString, resolvedHubName);

            return(new NotificationHubAsyncCollector(service, attribute.TagExpression));
        }
コード例 #4
0
        internal IAsyncCollector <Notification> BuildFromAttribute(NotificationHubAttribute attribute, TraceWriter trace)
        {
            string resolvedConnectionString = ResolveConnectionString(attribute.ConnectionStringSetting);
            string resolvedHubName          = ResolveHubName(attribute.HubName);
            bool   enableTestSend           = attribute.EnableTestSend;

            INotificationHubClientService service = GetService(resolvedConnectionString, resolvedHubName, enableTestSend);

            return(new NotificationHubAsyncCollector(service, attribute.TagExpression, attribute.EnableTestSend, trace));
        }
        public Task <IBinding> TryCreateAsync(BindingProviderContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

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

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

            if (string.IsNullOrEmpty(_config.ConnectionString) &&
                string.IsNullOrEmpty(attribute.ConnectionString))
            {
                throw new InvalidOperationException(
                          string.Format(CultureInfo.CurrentCulture,
                                        "The Notification Hub connection string must be set either via a '{0}' app setting, via the NotificationHubAttribute.ConnectionString property or via NotificationHubsConfiguration.ConnectionString.",
                                        NotificationHubsConfiguration.NotificationHubConnectionStringName));
            }

            if (string.IsNullOrEmpty(_config.HubName) &&
                string.IsNullOrEmpty(attribute.HubName))
            {
                throw new InvalidOperationException(
                          string.Format(CultureInfo.CurrentCulture,
                                        "The Notification Hub hub name must be set either via a '{0}' app setting, via the NotificationHubAttribute.HubName property or via NotificationHubsConfiguration.HubName.",
                                        NotificationHubsConfiguration.NotificationHubSettingName));
            }

            string resolvedConnectionString = ResolveConnectionString(_config.ConnectionString, attribute.ConnectionString);
            string resolvedHubName          = ResolveHubName(_config.HubName, attribute.HubName);

            INotificationHubClientService service = new NotificationHubClientService(resolvedConnectionString, resolvedHubName);

            Func <string, INotificationHubClientService> invokeStringBinder = (invokeString) => service;

            IBinding binding = BindingFactory.BindCollector(
                parameter,
                _converterManager,
                (nhClientService, valueBindingContext) => new NotificationHubAsyncCollector(service, attribute.TagExpression),
                "NotificationHubs",
                invokeStringBinder);

            return(Task.FromResult(binding));
        }
コード例 #6
0
        public override async Task BindAsync(BindingContext context)
        {
            // Only output bindings are supported.
            if (Access == FileAccess.Write && _bindingDirection == BindingDirection.Out)
            {
                NotificationHubAttribute attribute = new NotificationHubAttribute
                {
                    TagExpression    = TagExpression,
                    ConnectionString = ConnectionString,
                    HubName          = HubName
                };

                RuntimeBindingContext runtimeContext = new RuntimeBindingContext(attribute);
                await BindAsyncCollectorAsync <string>(context.Value, context.Binder, runtimeContext);
            }
        }
コード例 #7
0
        public override async Task BindAsync(BindingContext context)
        {
            // Only output bindings are supported.
            if (Access == FileAccess.Write && _bindingDirection == BindingDirection.Out)
            {
                NotificationHubAttribute attribute = new NotificationHubAttribute
                {
                    TagExpression = TagExpression,
                    ConnectionString = ConnectionString,
                    HubName = HubName
                };

                RuntimeBindingContext runtimeContext = new RuntimeBindingContext(attribute);
                await BindAsyncCollectorAsync<string>(context.Value, context.Binder, runtimeContext);
            }
        }