public LikesEventDispatcher(
     LikesKafkaConfig impressionsKafkaConfig,
     KafkaConfig kafkaConfig,
     IMessageSerializer messageSerializer) : base(kafkaConfig, messageSerializer)
 {
     this.impressionsKafkaConfig = impressionsKafkaConfig;
 }
        // This method gets called by the runtime. Use this method to add services to the container.
        public virtual void ConfigureServices(IServiceCollection services)
        {
            services.AddOptions();
            services.AddMediatR();
            services.Configure <AggregatesConfig>(this.Configuration);

            services.AddSingleton(x =>
                                  JsonConvert.DeserializeObject <LikesElasticSearchConfig>(
                                      this.Configuration.GetValue <string>(
                                          LikesElasticSearchConfig.ConfigName)));

            services.AddSingleton(x =>
                                  JsonConvert.DeserializeObject <FavoritesElasticSearchConfig>(
                                      this.Configuration.GetValue <string>(
                                          FavoritesElasticSearchConfig.ConfigName)));

            services.AddSingleton(x => new KafkaConfig
            {
                KAFKA_EVENTS_CONSUMER_CONFIG = JsonConvert
                                               .DeserializeObject <Dictionary <string, object> >(
                    this.Configuration.GetValue <string>(
                        nameof(KafkaConfig.KAFKA_EVENTS_CONSUMER_CONFIG))),

                KAFKA_REQUESTS_CONSUMER_CONFIG = JsonConvert
                                                 .DeserializeObject <Dictionary <string, object> >(
                    this.Configuration.GetValue <string>(
                        nameof(KafkaConfig.KAFKA_REQUESTS_CONSUMER_CONFIG))),

                KAFKA_EVENTS_PRODUCER_CONFIG = JsonConvert
                                               .DeserializeObject <Dictionary <string, object> >(
                    this.Configuration.GetValue <string>(
                        nameof(KafkaConfig.KAFKA_EVENTS_PRODUCER_CONFIG))),

                KAFKA_REQUESTS_PRODUCER_CONFIG = JsonConvert
                                                 .DeserializeObject <Dictionary <string, object> >(
                    this.Configuration.GetValue <string>(
                        nameof(KafkaConfig.KAFKA_REQUESTS_PRODUCER_CONFIG))),

                EVENT_TOPICS = JsonConvert
                               .DeserializeObject <string[]>(
                    this.Configuration.GetValue <string>(
                        nameof(KafkaConfig.EVENT_TOPICS))),

                REQUEST_TOPICS = JsonConvert
                                 .DeserializeObject <string[]>(
                    this.Configuration.GetValue <string>(
                        nameof(KafkaConfig.REQUEST_TOPICS))),
            });

            services.AddSingleton(x =>
            {
                var config = new LikesKafkaConfig();
                this.Configuration.Bind(config);
                return(config);
            });

            services.AddSingleton(x =>
            {
                var config = new FavoritesKafkaConfig();
                this.Configuration.Bind(config);
                return(config);
            });

            services.AddMemoryCache();
            services.AddMvc();
        }