public static void AddProducer(this MessagingOptions builder, Action <ProducerConfig> configuration) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } if (configuration == null) { throw new ArgumentNullException(nameof(configuration)); } var config = new ProducerConfig(); configuration(config); if (config.ProducerConfiguration == null) { throw new ArgumentNullException(nameof(config.ProducerConfiguration)); } builder.Container.Register(typeof(IEnumerable <MessageConfiguration>), () => config.MessageConfigurations.Select(a => { var c = new MessageConfiguration(); c.Init(a); return(c); }), Lifestyle.Singleton); builder.Container.Register(typeof(IMessageConfigurationProvider <>), typeof(MessageConfigurationProvider <>), Lifestyle.Singleton); builder.Container.RegisterSingleton <IProducerFactory, ProducerFactory>(); builder.Container.RegisterSingleton <IProducerConfiguration>(config); builder.HasProducer = true; }