Esempio n. 1
0
        internal RabbitMQBusServiceOptions Build()
        {
            var    strict            = Strict;
            object defaultChannelTag = DefaultChannelTag;
            var    connectionFactory = new ConnectionFactory();

            var messageTypeOptionsProvider = strict
                ? null
                : MessageTypeOptionsProvider.CreateDefaultProvider();

            foreach (var action in ConfigureConnectionActions)
            {
                action(connectionFactory);
            }

            var channelsOptions = ChannelsOptionsFactories
                                  .Select(factory => factory(messageTypeOptionsProvider))
                                  .ToArray();

            if (!strict)
            {
                bool autoDefaultChannel;
                if (defaultChannelTag == null)
                {
                    defaultChannelTag  = new object();
                    autoDefaultChannel = true;
                }
                else
                {
                    autoDefaultChannel = !channelsOptions.Any(x => defaultChannelTag.Equals(x.Tag));
                }

                if (autoDefaultChannel)
                {
                    Array.Resize(ref channelsOptions, channelsOptions.Length + 1);
                    channelsOptions[channelsOptions.Length - 1] = new RabbitMQChannelOptionsBuilder(Services, defaultChannelTag, messageTypeOptionsProvider).Build();
                }
            }

            return(new RabbitMQBusServiceOptions(
                       Services,
                       connectionFactory,
                       defaultChannelTag,
                       messageTypeOptionsProvider,
                       channelsOptions
                       ));
        }
 internal RabbitMQChannelOptionsBuilder(IServiceProvider services, object tag, MessageTypeOptionsProvider baseMessageTypeOptionsProvider)
 {
     Services = services;
     Tag      = tag;
     MessageTypeOptionsProvider = new MessageTypeOptionsProvider(baseMessageTypeOptionsProvider);
 }