public static CqrsEngineBuilder Configure(FileStorageConfig cache) { var observer = new ImmediateEventsObserver(); observer.Event += @event => { var failed = @event as EnvelopeDispatchFailed; if (failed != null) { Trace.WriteLine(failed.Exception); } }; var builder = new CqrsEngineBuilder(); builder.Advanced.RegisterObserver(observer); builder.Advanced.RegisterQueueWriterFactory(context => new FileQueueWriterFactory(cache, context.Resolve <IEnvelopeStreamer>())); builder.Domain(m => { m.HandlerSample <IConsume <IBaseMessage> >(c => c.Consume(null)); m.InAssemblyOf <StoryViewHandler>(); m.InAssemblyOf <AddNote>(); m.InAssemblyOf <StoryList>(); }); builder.Advanced.CustomDataSerializer(t => new DataSerializerWithProtoBuf(t)); builder.Advanced.CustomEnvelopeSerializer(new EnvelopeSerializerWithProtoBuf()); builder.Storage(c => { RegisterAtomicStorage(cache, c); c.TapeIsInFiles(Path.Combine(cache.Folder.FullName, "tapes")); }); builder.File(m => { m.AddFileSender(cache, "router", cm => cm.IdGeneratorForTests()); m.AddFileProcess(cache, "router", x => x.DispatcherIsLambda(SaveAndRoute)); m.AddFileProcess(cache, "events", p => p.DispatchAsEvents(md => md.WhereMessagesAre <IEvent>())); m.AddFileProcess(cache, "aggregates", p => p.DispatcherIs(context => { var readers = context.Resolve <ITapeStorageFactory>(); var streamer = context.Resolve <IEnvelopeStreamer>(); var reg = context.Resolve <QueueWriterRegistry>(); return(new AggregateDispatcher(readers, streamer, "files:router", reg)); })); }); return(builder); }
protected override void CurrentConfig(CqrsEngineBuilder config) { var currentDirectory = Directory.GetCurrentDirectory(); var bus = Path.Combine(currentDirectory, "test"); var dir = new DirectoryInfo(bus); if (dir.Exists) { dir.Delete(true); } var store = FileStorage.CreateConfig(bus, "file"); config.File(m => { m.AddFileProcess(store, "do", x => x.DispatchAsCommandBatch()); m.AddFileSender(store, "do", cb => cb.IdGeneratorForTests()); }); }