private void Domain() { Converts.Repository .AddStringTo <int>(Int32.TryParse) .AddStringTo <bool>(Boolean.TryParse) .AddEnumSearchHandler(false) .AddJsonEnumSearchHandler() .AddJsonPrimitivesSearchHandler() .AddJsonObjectSearchHandler() .AddJsonKey() .AddJsonTimeSpan() .Add(new ColorConverter()) .AddToStringSearchHandler(); EventStore = new EntityEventStore(ServiceProvider.EventSourcingContextFactory); eventDispatcher = new PersistentEventDispatcher(new EmptyEventStore()); eventDispatcher.DispatcherExceptionHandlers.Add(this); eventDispatcher.EventExceptionHandlers.Add(this); IFactory <ICompositeStorage> compositeStorageFactory = Factory.Default <JsonCompositeStorage>(); typeProvider = new ReflectionCompositeTypeProvider( new ReflectionCompositeDelegateFactory(), BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public ); CommandFormatter = new CompositeCommandFormatter(typeProvider, compositeStorageFactory); EventFormatter = new CompositeEventFormatter(typeProvider, compositeStorageFactory, new List <ICompositeFormatterExtender>() { new UserKeyEventExtender() }); commandDispatcher = new PersistentCommandDispatcher(new SerialCommandDistributor(), new EmptyCommandStore(), CommandFormatter); OutcomeRepository = new AggregateRootRepository <Outcome>( EventStore, EventFormatter, new ReflectionAggregateRootFactory <Outcome>(), eventDispatcher, new NoSnapshotProvider(), new EmptySnapshotStore() ); CategoryRepository = new AggregateRootRepository <Category>( EventStore, EventFormatter, new ReflectionAggregateRootFactory <Category>(), eventDispatcher, new NoSnapshotProvider(), new EmptySnapshotStore() ); CurrencyListRepository = new AggregateRootRepository <CurrencyList>( EventStore, EventFormatter, new ReflectionAggregateRootFactory <CurrencyList>(), eventDispatcher, new NoSnapshotProvider(), new EmptySnapshotStore() ); Money.BootstrapTask bootstrapTask = new Money.BootstrapTask( commandDispatcher.Handlers, Factory.Instance(OutcomeRepository), Factory.Instance(CategoryRepository), Factory.Instance(CurrencyListRepository) ); bootstrapTask.Initialize(); }
private void Domain(IServiceProvider provider) { Converts.Repository .AddStringTo <int>(Int32.TryParse) .AddStringTo <bool>(Boolean.TryParse) .AddEnumSearchHandler(false) .AddJsonEnumSearchHandler() .AddJsonPrimitivesSearchHandler() .AddJsonObjectSearchHandler() .AddJsonKey() .AddJsonTimeSpan() .Add(new ColorConverter()) .AddToStringSearchHandler(); var eventSourcingContextFactory = provider.GetRequiredService <IFactory <EventSourcingContext> >(); eventStore = new EntityEventStore(eventSourcingContextFactory); eventDispatcher = new PersistentEventDispatcher(new EmptyEventStore()); eventDispatcher.DispatcherExceptionHandlers.Add(exceptionHandlerBuilder); eventDispatcher.EventExceptionHandlers.Add(exceptionHandlerBuilder); IFactory <ICompositeStorage> compositeStorageFactory = Factory.Default <JsonCompositeStorage>(); typeProvider = new ReflectionCompositeTypeProvider( new ReflectionCompositeDelegateFactory(), BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public ); commandFormatter = new CompositeCommandFormatter(typeProvider, compositeStorageFactory); eventFormatter = new CompositeEventFormatter(typeProvider, compositeStorageFactory, new List <ICompositeFormatterExtender>() { new UserKeyEventExtender() }); queryFormatter = new CompositeListFormatter(typeProvider, compositeStorageFactory, logFactory); exceptionFormatter = new CompositeExceptionFormatter(typeProvider, compositeStorageFactory); commandDispatcher = new PersistentCommandDispatcher(new SerialCommandDistributor(), new EmptyCommandStore(), commandFormatter); commandDispatcher.DispatcherExceptionHandlers.Add(exceptionHandlerBuilder); commandDispatcher.CommandExceptionHandlers.Add(exceptionHandlerBuilder); queryDispatcher = new DefaultQueryDispatcher(); var snapshotProvider = new NoSnapshotProvider(); var snapshotStore = new EmptySnapshotStore(); var outcomeRepository = new AggregateRootRepository <Outcome>( eventStore, eventFormatter, new ReflectionAggregateRootFactory <Outcome>(), eventDispatcher, snapshotProvider, snapshotStore ); var expenseTemplateRepository = new AggregateRootRepository <ExpenseTemplate>( eventStore, eventFormatter, new ReflectionAggregateRootFactory <ExpenseTemplate>(), eventDispatcher, snapshotProvider, snapshotStore ); var incomeRepository = new AggregateRootRepository <Income>( eventStore, eventFormatter, new ReflectionAggregateRootFactory <Income>(), eventDispatcher, snapshotProvider, snapshotStore ); var categoryRepository = new AggregateRootRepository <Category>( eventStore, eventFormatter, new ReflectionAggregateRootFactory <Category>(), eventDispatcher, snapshotProvider, snapshotStore ); var currencyListRepository = new AggregateRootRepository <CurrencyList>( eventStore, eventFormatter, new ReflectionAggregateRootFactory <CurrencyList>(), eventDispatcher, snapshotProvider, snapshotStore ); Money.BootstrapTask bootstrapTask = new Money.BootstrapTask( commandDispatcher.Handlers, Factory.Instance(outcomeRepository), Factory.Instance(expenseTemplateRepository), Factory.Instance(incomeRepository), Factory.Instance(categoryRepository), Factory.Instance(currencyListRepository) ); bootstrapTask.Initialize(); ServiceProvider serviceProvider = services.BuildServiceProvider(); UserHandler userHandler = new UserHandler( serviceProvider.GetRequiredService <UserManager <User> >(), serviceProvider.GetRequiredService <IFactory <AccountContext> >(), eventDispatcher, allowedUserPropertyKeys ); commandDispatcher.Handlers.AddAll(userHandler); queryDispatcher.AddAll(userHandler); }