public EventRepository(
     IUnitOfWork unitOfWork,
     IDependencyScope scope,
     IJsonConverter jsonConverter,
     EventConverterFactoryCache converterFactoryCache)
     : base(unitOfWork)
 {
     _scope                 = scope;
     _jsonConverter         = jsonConverter;
     _converterFactoryCache = converterFactoryCache;
 }
        protected override void Load(ContainerBuilder builder)
        {
            base.Load(builder);

            var eventTypes = _eventAssemblies
                             .SelectMany(assemblyName => LoadTypes(assemblyName))
                             .ToArray();

            builder
            .Register(_ =>
            {
                var cache = new EventHandlerRunnerCache();
                cache.Populate(eventTypes);
                return(cache);
            })
            .SingleInstance();
            builder
            .Register(_ =>
            {
                var cache = new EventConverterFactoryCache();
                cache.Populate(eventTypes);
                return(cache);
            })
            .SingleInstance();
            builder
            .RegisterType <EventualConsistentWorker>()
            .SingleInstance();
            builder
            .RegisterType <NewtonsoftJsonConverter>()
            .As <IJsonConverter>()
            .SingleInstance();
            builder
            .RegisterType <Clock>()
            .SingleInstance();
            builder
            .RegisterType <EventDispatcher>()
            .InstancePerLifetimeScope();
            builder
            .RegisterType <EventRepository>()
            .As <IEventRepository>()
            .InstancePerLifetimeScope();
            builder
            .RegisterType <NpgsqlDbConnector>()
            .As <IDbConnector>()
            .InstancePerLifetimeScope();
            builder
            .RegisterType <NpgsqlUnitOfWork>()
            .As <IUnitOfWork>()
            .InstancePerLifetimeScope();
            builder
            .RegisterType <AutofacDependencyScope>()
            .As <IDependencyScope>()
            .InstancePerLifetimeScope();
        }