コード例 #1
0
        private static void EnsureExchangeHasNotBeenConfiguredYet(IServiceCollection services, string exchangeName, ClientExchangeType clientExchangeType)
        {
            var specification = new DuplicatedRabbitMqExchangeDeclarationSpecification(exchangeName, clientExchangeType);

            if (services.Any(x => specification.IsSatisfiedBy(x)))
            {
                throw new ArgumentException($"Exchange {exchangeName} has been added already!");
            }
        }
コード例 #2
0
        /// <summary>
        /// Add an exchange as a singleton.
        /// </summary>
        /// <param name="services">Service collection.</param>
        /// <param name="exchangeName">Exchange name.</param>
        /// <param name="options">Exchange configuration <see cref="RabbitMqExchangeOptions"/>.</param>
        /// <param name="clientExchangeType">Custom client exchange type that defines what functionality is allowed for an exchange.</param>
        /// <returns>Service collection.</returns>
        public static IServiceCollection AddExchange(this IServiceCollection services, string exchangeName, RabbitMqExchangeOptions?options, ClientExchangeType clientExchangeType = ClientExchangeType.Universal)
        {
            var exchangeOptions = options ?? new RabbitMqExchangeOptions();

            ValidateExchangeTypes(exchangeName, exchangeOptions);
            EnsureExchangeHasNotBeenConfiguredYet(services, exchangeName, clientExchangeType);

            var exchange = new RabbitMqExchange(exchangeName, clientExchangeType, exchangeOptions);
            var service  = new ExchangeServiceDescriptor(typeof(RabbitMqExchange), exchange, exchangeName, clientExchangeType);

            services.Add(service);
            return(services);
        }
コード例 #3
0
        /// <summary>
        /// Add an exchange as a singleton.
        /// </summary>
        /// <param name="services">Service collection.</param>
        /// <param name="exchangeName">Exchange name.</param>
        /// <param name="configuration">Exchange configuration section.</param>
        /// <param name="clientExchangeType">Custom client exchange type that defines what functionality is allowed for an exchange.</param>
        /// <returns>Service collection.</returns>
        public static IServiceCollection AddExchange(this IServiceCollection services, string exchangeName, IConfiguration configuration, ClientExchangeType clientExchangeType = ClientExchangeType.Universal)
        {
            var options = new RabbitMqExchangeOptions();

            configuration.Bind(options);
            return(services.AddExchange(exchangeName, options, clientExchangeType));
        }
 internal DuplicatedRabbitMqExchangeDeclarationSpecification(string exchangeName, ClientExchangeType exchangeType)
 {
     _exchangeName = exchangeName;
     _exchangeType = exchangeType;
 }
 public RabbitMqExchange(string name, ClientExchangeType clientExchangeType, RabbitMqExchangeOptions options)
 {
     Name = name;
     ClientExchangeType = clientExchangeType;
     Options            = options;
 }
 public ExchangeServiceDescriptor(Type serviceType, object instance, string exchangeName, ClientExchangeType clientExchangeType)
     : base(serviceType, instance)
 {
     ExchangeName       = exchangeName;
     ClientExchangeType = clientExchangeType;
 }