/// <summary>
        /// Configures a dependent view manager event dispatcher that tacks on to any number of dependent views, catching up from the
        /// event store when the dependent views have caught up.
        /// </summary>
        public DependentViewManagerEventDispatcherSettings UseDependentViewManagerEventDispatcher(params IViewManager[] viewManagers)
        {
            var settings = new DependentViewManagerEventDispatcherSettings();

            UseEventDispatcher(context =>
            {
                var eventDispatcher = new DependentViewManagerEventDispatcher(settings.DependentViewManagers,
                                                                              viewManagers,
                                                                              context.Get <IEventStore>(),
                                                                              context.Get <IDomainEventSerializer>(),
                                                                              context.Get <IAggregateRootRepository>(),
                                                                              context.Get <IDomainTypeNameMapper>(),
                                                                              settings.ViewContextItems)
                {
                    MaxDomainEventsPerBatch = settings.MaxDomainEventsPerBatch
                };

                if (settings.ViewManagerProfiler != null)
                {
                    eventDispatcher.SetProfiler(settings.ViewManagerProfiler);
                }

                foreach (var waitHandle in settings.WaitHandles)
                {
                    waitHandle.Register(eventDispatcher);
                }

                return(eventDispatcher);
            });

            return(settings);
        }
        public void WhenCreatingADependantViewDispatcherThenMaxValueIsNotZeroOrLess()
        {
            //arrange
            var viewManager1      = new Mock <IViewManager>().Object;
            var viewManager2      = new Mock <IViewManager>().Object;
            var domainSerializer  = new Mock <IDomainEventSerializer>().Object;
            var eventStore        = new InMemoryEventStore();
            var aggregateRootRepo = new Mock <IAggregateRootRepository>().Object;
            var domainTypemapper  = new Mock <IDomainTypeNameMapper>().Object;
            //act
            var sut = new DependentViewManagerEventDispatcher(new[] { viewManager1 }, new[] { viewManager2 }, eventStore,
                                                              domainSerializer, aggregateRootRepo, domainTypemapper, null);


            //assert
            Assert.IsTrue(sut.MaxDomainEventsPerBatch >= 1);
        }
        public void WhenCreatingADependantViewDispatcherThenMaxValueIsNotZeroOrLess()
        {

            //arrange
            var viewManager1 = new Mock<IViewManager>().Object;
            var viewManager2 = new Mock<IViewManager>().Object;
            var domainSerializer = new Mock<IDomainEventSerializer>().Object;
            var eventStore = new InMemoryEventStore();
            var aggregateRootRepo = new Mock<IAggregateRootRepository>().Object;
            var domainTypemapper = new Mock<IDomainTypeNameMapper>().Object;
            //act
            var sut = new DependentViewManagerEventDispatcher(new[] { viewManager1 }, new[] { viewManager2 }, eventStore,
                domainSerializer, aggregateRootRepo, domainTypemapper, null);


            //assert
            Assert.IsTrue(sut.MaxDomainEventsPerBatch >= 1);
        }