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!"); } }
/// <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); }
/// <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; }