예제 #1
0
        public EventsChasingService(string name, IEventStoreCheckpoint storeChekpoint, object projection, IBufferedDocumentWriter writer, IDocumentStore viewsStorage, MessageStore eventsStore)
        {
            Condition.Requires(name, "name").IsNotNull();
            Condition.Requires(eventsStore, "eventsStore").IsNotNull();
            Condition.Requires(projection, "projection").IsNotNull();
            Condition.Requires(writer, "writer").IsNotNull();
            Condition.Requires(viewsStorage, "viewsStorage").IsNotNull();
            Condition.Requires(eventsStore, "eventsStore").IsNotNull();

            this._name           = name;
            this._storeChekpoint = storeChekpoint;
            this._writer         = writer;
            this._eventsStore    = eventsStore;
            this._projectionName = projection.GetType().Name;

            this._eventHandlers = new RedirectToDynamicEvent();
            this._eventHandlers.WireToWhen(projection);
        }
예제 #2
0
        public IDocumentWriter <TKey, TEntity> GetWriter <TKey, TEntity>()
        {
            // find existing writer if one exists
            var bufferedWriter = (BufferedDocumentWriter <TKey, TEntity>) this._documentWriters.FirstOrDefault(w => w is BufferedDocumentWriter <TKey, TEntity>);

            if (bufferedWriter != null)
            {
                return(bufferedWriter);
            }

            // create writer since one doesn't exist
            var innerWriter = this._innerDocumentStore.GetWriter <TKey, TEntity>();
            var innerReader = this._innerDocumentStore.GetReader <TKey, TEntity>();

            bufferedWriter = new BufferedDocumentWriter <TKey, TEntity>(innerReader, innerWriter, _strategy);
            this._documentWriters.Add(bufferedWriter);
            LatestWriter = bufferedWriter;

            return(bufferedWriter);
        }