예제 #1
0
        public TestBase()
        {
            var services         = new ServiceCollection();
            var configuration    = ConfigurationRootCreator.Create(services);
            var elasticsearchUrl = configuration["ElasticsearchUrl"];
            var connection       = new ConnectionSettings(new Uri(elasticsearchUrl));

            connection.DisableDirectStreaming(true);

            Resolver = EventFlowOptions.New
                       .UseServiceCollection(services)
                       .RegisterModule <BookingDomainModule>()
                       .RegisterModule <CommandModule>()
                       .RegisterModule <CommandHandlersModule>()
                       .RegisterModule <ElasticsearchReadModelModule>()
                       .RegisterModule <ElasticsearchQueryHandlersModule>()
                       .ConfigureElasticsearch(connection)
                       .CreateResolver();

            CommandBus     = Resolver.Resolve <ICommandBus>();
            QueryProcessor = Resolver.Resolve <IQueryProcessor>();

            var indexer = Resolver.Resolve <BookingReadModelIndexer>();

            indexer.PrepareIndex();
        }
예제 #2
0
        public Task LogException(string message)
        {
            var log = _resolver.Resolve <ILog>();

            log.Debug(message);

            return(Task.FromResult(0));
        }
예제 #3
0
 public void SetUp()
 {
     _resolver = EventFlowOptions.New
                 .ConfigureShippingDomain()
                 .ConfigureShippingQueriesInMemory()
                 .CreateResolver();
     _eventStore = _resolver.Resolve <IEventStore>();
     _commandBus = _resolver.Resolve <ICommandBus>();
 }
예제 #4
0
        public SelectJourneysCommandHandlerTests()
        {
            _bookingId = BookingId.New;
            _resolver  = EventFlowOptions.New
                         .ConfigureBookingDomain()
                         .ConfigureBookingCommands()
                         .ConfigureBookingCommandHandlers()
                         .CreateResolver();

            _commandBus     = _resolver.Resolve <ICommandBus>();
            _aggregateStore = _resolver.Resolve <IAggregateStore>();
        }
        public void Assert_Decorator()
        {
            // The order should be like this (like unwrapping a present with the order of
            // wrapping paper applied)
            //
            // Call      MagicClassDecorator2
            // Call      MagicClassDecorator1
            // Call      MagicClass
            // Return to MagicClassDecorator1
            // Return to MagicClassDecorator2

            _sut.Decorate <IMagicInterface>((r, inner) => new MagicClassDecorator1(inner));
            _sut.Decorate <IMagicInterface>((r, inner) => new MagicClassDecorator2(inner));

            IRootResolver resolver = _sut.CreateResolver();
            var           magic    = resolver.Resolve <IMagicInterface>();

            magic.ShouldBeAssignableTo <MagicClassDecorator2>();
            var magicClassDecorator2 = (MagicClassDecorator2)magic;

            magicClassDecorator2.Inner.ShouldBeAssignableTo <MagicClassDecorator1>();
            var magicClassDecorator1 = (MagicClassDecorator1)magicClassDecorator2.Inner;

            magicClassDecorator1.Inner.ShouldBeAssignableTo <MagicClass>();
        }
 public static async Task <CompetitionReadModel> Query(IRootResolver resolver, CompetitionId exampleId)
 {
     // Resolve the query handler and use the built-in query for fetching
     // read models by identity to get our read model representing the
     // state of our aggregate root
     return(await resolver.Resolve <IQueryProcessor>().ProcessAsync(new ReadModelByIdQuery <CompetitionReadModel>(exampleId), CancellationToken.None));
 }
예제 #7
0
        public void if_any_exception_appears_on_disposing_events_root_container_should_be_dispose_finally()
        {
            ISomeManager  manager      = null;
            IRootResolver rootResolver = IocBuilder.New
                                         .UseAutofacContainerBuilder()
                                         .RegisterServices(r =>
            {
                r.Register <ISomeManager, SomeManager>();
                r.OnDisposing += (sender, args) =>
                {
                    manager = args.Context.Resolver.Resolve <ISomeManager>();
                    manager.Shutdown();

                    throw new HandlerException();
                };
            })
                                         .CreateResolver();

            Action act = () => rootResolver.Dispose();

            act.ShouldThrow <HandlerException>();

            Action containerDisposedAction = () => rootResolver.Container.Resolve <ISomeManager>();

            containerDisposedAction.ShouldThrow <ObjectDisposedException>();

            Action rootResolverDisposedAction = () => rootResolver.Resolve <ISomeManager>();

            rootResolverDisposedAction.ShouldThrow <ObjectDisposedException>();

            manager.ShutdownCount.ShouldBe(1);
        }
예제 #8
0
        public static void Main(string[] args)
        {
            NHibernateProfiler.Initialize();

            IRootResolver rootResolver = IocBuilder.New
                                         .UseAutofacContainerBuilder()
                                         .UseStove <StoveDemoBootstrapper>()
                                         .UseStoveNullLogger()
                                         .UseStoveNHibernate(nhCfg =>
            {
                nhCfg.FluentConfiguration
                .Database(MsSqlConfiguration.MsSql2012.ConnectionString(nhCfg.Configuration.DefaultNameOrConnectionString))
                .Mappings(m => m.FluentMappings.AddFromAssembly(Assembly.GetExecutingAssembly()));

                return(nhCfg);
            })
                                         .UseStoveDefaultConnectionStringResolver()
                                         .UseStoveDapper()
                                         .UseStoveEventBus()
                                         .RegisterServices(r => r.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly()))
                                         .CreateResolver();

            using (rootResolver)
            {
                rootResolver.Resolve <ProductDomainService>().DoSomeCoolStuff();
            }

            NHibernateProfiler.Shutdown();

            Console.ReadLine();
        }
        public void Assert_Service()
        {
            IRootResolver resolver       = _sut.CreateResolver();
            var           magicInterface = resolver.Resolve <IMagicInterface>();

            magicInterface.ShouldNotBeNull();
            magicInterface.ShouldBeAssignableTo <MagicClass>();
        }
예제 #10
0
        public TestBase()
        {
            var services = new ServiceCollection();

            ConfigurationRootCreator.Create(services);

            Resolver = EventFlowOptions.New
                       .UseServiceCollection(services)
                       .RegisterModule <BookingDomainModule>()
                       .RegisterModule <CommandModule>()
                       .RegisterModule <CommandHandlersModule>()
                       .RegisterServices(r => r.Register <IDbContextProvider <EventStoreContext>, FakedEventStoreContextProvider>())
                       .CreateResolver();

            CommandBus     = Resolver.Resolve <ICommandBus>();
            AggregateStore = Resolver.Resolve <IAggregateStore>();
        }
예제 #11
0
        public TestBase()
        {
            BookingId = BookingId.New;
            Resolver  = EventFlowOptions.New
                        .ConfigureBookingDomain()
                        .CreateResolver();

            AggregateStore = Resolver.Resolve <IAggregateStore>();
        }
예제 #12
0
        public TestBase()
        {
            var services = new ServiceCollection();

            var runner = MongoDbRunner.Start();

            Resolver = EventFlowOptions.New
                       .UseServiceCollection(services)
                       .RegisterModule <BookingDomainModule>()
                       .RegisterModule <CommandModule>()
                       .RegisterModule <CommandHandlersModule>()
                       .RegisterModule <MongoDbReadModelModule>()
                       .RegisterModule <MongoDbQueryHandlersModule>()
                       .ConfigureMongoDb(runner.ConnectionString, "restairline")
                       .CreateResolver();

            CommandBus     = Resolver.Resolve <ICommandBus>();
            QueryProcessor = Resolver.Resolve <IQueryProcessor>();
        }
예제 #13
0
        public Bootstrap()
        {
            var mquri  = new Uri("amqp://*****:*****@127.0.0.1");
            var mqconf = RabbitMqConfiguration.With(
                mquri, true, 5, "loxnet"
                );

            _resolver = EventFlowOptions.New
                        .ConfigureTransportDomain()
                        .UseConsoleLog()
                        .PublishToRabbitMq(mqconf)
                        .CreateResolver();

            _aggregateStore = _resolver
                              .Resolve <IAggregateStore>();

            _commandBus = _resolver
                          .Resolve <ICommandBus>();
        }
예제 #14
0
        public TestBase()
        {
            Resolver = EventFlowOptions.New.ConfigureBookingDomain()
                       .ConfigureBookingCommands()
                       .ConfigureBookingCommandHandlers()
                       .ConfigureReadModel()
                       .CreateResolver();

            CommandBus = Resolver.Resolve <ICommandBus>();
        }
예제 #15
0
        public void Initialize(ExtensionConfigContext context)
        {
            _resolver = IocBuilder.New
                        .UseAutofacContainerBuilder()
                        .RegisterServices(r => r.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly()))
                        .CreateResolver();

            context.AddBindingRule <InjectAttribute>()
            .BindToInput <dynamic>(inject => _resolver.Resolve(inject.Type));
        }
예제 #16
0
        private EntryId[] RegisterCompetitionWithEntries(IRootResolver resolver, int amount, CompetitionId competitionId = null)
        {
            var domainId = PrepareCompetition(resolver, "test-competition", "test-user", competitionId);

            // Resolve the command bus and use it to publish a command
            var commandBus = resolver.Resolve <ICommandBus>();

            // Resolve the query handler and use the built-in query for fetching
            // read models by identity to get our read model representing the
            // state of our aggregate root
            var queryProcessor = resolver.Resolve <IQueryProcessor>();

            const string discipline = "Discipline";

            EntryId[] ids = new EntryId[amount];

            for (int x = 0; x < amount; x++)
            {
                var entryId = EntryId.New;
                ids[x] = entryId;

                string competitor = string.Format("Competitor {0}", x + 1);
                int    time       = 12300 + x;

                // Add
                var executionResult = commandBus.PublishAsync(new RecordEntryCommand(domainId, entryId, discipline, competitor, time + 1), CancellationToken.None).Result;
                executionResult.IsSuccess.Should().BeTrue();

                // Change time
                executionResult = commandBus.PublishAsync(new CorrectEntryTimeCommand(domainId, entryId, time), CancellationToken.None).Result;
                executionResult.IsSuccess.Should().BeTrue();

                // Verify that the read model has the expected value
                var readModel2 = queryProcessor.ProcessAsync(new ReadModelByIdQuery <EntryReadModel>(entryId), CancellationToken.None).Result;
                readModel2.Should().NotBeNull();
                readModel2.AggregateId.Should().Be(entryId.Value);
                readModel2.Discipline.Should().Be(discipline);
                readModel2.Competitor.Should().Be(competitor);
                readModel2.TimeInMillis.Should().Be(time);
            }
            return(ids);
        }
예제 #17
0
        public TestBase()
        {
            var services      = new ServiceCollection();
            var configuration = ConfigurationRootCreator.Create(services);

            services.Configure <RabbitMqOption>(configuration);
            services.ConfigureBus();
            services.AddSingleton <ISubscribeSynchronousToAll, RabbitMqEventPublisher>();

            Resolver = EventFlowOptions.New
                       .UseServiceCollection(services)
                       .RegisterModule <BookingDomainModule>()
                       .RegisterModule <CommandModule>()
                       .RegisterModule <CommandHandlersModule>()
                       .RegisterServices(r => r.Register <IDbContextProvider <EventStoreContext>, FakedEventStoreContextProvider>())
                       .CreateResolver(false);

            CommandBus    = Resolver.Resolve <ICommandBus>();
            HostedService = Resolver.Resolve <IHostedService>();
        }
예제 #18
0
        public async Task Simple()
        {
            await CreateLocationAggregatesAsync().ConfigureAwait(false);
            await CreateVoyageAggregatesAsync().ConfigureAwait(false);

            var route = new Route(
                Locations.Tokyo,
                Locations.Helsinki,
                1.October(2008).At(11, 00),
                6.November(2008).At(12, 00));

            var booking = _resolver.Resolve <IBookingApplicationService>();
            await booking.BookCargoAsync(route, CancellationToken.None).ConfigureAwait(false);

            var voyage = _resolver.Resolve <IScheduleApplicationService>();

            await voyage.DelayScheduleAsync(
                Voyages.DallasToHelsinkiId,
                TimeSpan.FromDays(7),
                CancellationToken.None)
            .ConfigureAwait(false);
        }
예제 #19
0
        public void SetUp()
        {
            _resolver = EventFlowOptions.New
                        .AddSagas(typeof(AlternativeSagaStoreTestClasses.TestSaga))
                        .AddCommandHandlers(
                typeof(AlternativeSagaStoreTestClasses.SagaTestACommandHandler),
                typeof(AlternativeSagaStoreTestClasses.SagaTestBCommandHandler),
                typeof(AlternativeSagaStoreTestClasses.SagaTestCCommandHandler))
                        .AddEvents(
                typeof(AlternativeSagaStoreTestClasses.SagaTestEventA),
                typeof(AlternativeSagaStoreTestClasses.SagaTestEventB),
                typeof(AlternativeSagaStoreTestClasses.SagaTestEventC))
                        .RegisterServices(sr =>
            {
                sr.RegisterType(typeof(AlternativeSagaStoreTestClasses.TestSagaLocator));
                sr.Register <ISagaStore, AlternativeSagaStoreTestClasses.InMemorySagaStore>(Lifetime.Singleton);
            })
                        .CreateResolver(false);

            _commandBus     = _resolver.Resolve <ICommandBus>();
            _aggregateStore = _resolver.Resolve <IAggregateStore>();
        }
        public override IRootResolver CreateRootResolver(IEventFlowOptions eventFlowOptions)
        {
            // Disable SSL certificate validation
            ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

            var url = Environment.GetEnvironmentVariable("ELASTICSEARCH_URL");
            if (string.IsNullOrEmpty(url))
            {
                Assert.Inconclusive("The environment variabel named 'ELASTICSEARCH_URL' isn't set. Set it to e.g. 'http://localhost:9200'");
            }

            _resolver = eventFlowOptions
                .ConfigureElasticsearch(new Uri(url))
                .UseElasticsearchReadModel<ElasticsearchTestAggregateReadModel>()
                .CreateResolver();
            _elasticClient = _resolver.Resolve<IElasticClient>();
            _readModelPopulator = _resolver.Resolve<IReadModelPopulator>();
            _readModelDescriptionProvider = _resolver.Resolve<IReadModelDescriptionProvider>();
            _readModelStore = _resolver.Resolve<IElasticsearchReadModelStore<ElasticsearchTestAggregateReadModel>>();

            return _resolver;
        }
        private void PrepareIndexes(IRootResolver resolver)
        {
            _elasticClient = resolver.Resolve <IElasticClient>();

            var readModelTypes =
                GetLoadableTypes <ElasticsearchTypeAttribute>(typeof(ElasticsearchThingyReadModel).Assembly);

            foreach (var readModelType in readModelTypes)
            {
                var esType = readModelType.GetTypeInfo()
                             .GetCustomAttribute <ElasticsearchTypeAttribute>();

                //var indexName = GetIndexName(esType.RelationName);
                var aliasResponse  = _elasticClient.Indices.GetAlias(esType.RelationName);
                var alias2Response = _elasticClient.GetAliasesPointingToIndex(esType.RelationName);
                var indexResponse  = _elasticClient.Indices.Get(esType.RelationName);

                if (aliasResponse.ApiCall.Success)
                {
                    if (aliasResponse.Indices != null)
                    {
                        foreach (var indice in aliasResponse?.Indices)
                        {
                            _elasticClient.Indices.DeleteAlias(
                                indice.Key,
                                esType.RelationName
                                );

                            _elasticClient.Indices.Delete(
                                indice.Key,
                                d => d.RequestConfiguration(c => c.AllowedStatusCodes((int)HttpStatusCode.NotFound))
                                );
                        }

                        _elasticClient.Indices.Delete(
                            esType.RelationName,
                            d => d.RequestConfiguration(c => c.AllowedStatusCodes((int)HttpStatusCode.NotFound))
                            );
                    }
                }
                var indexName = GetIndexName(esType.RelationName);

                _indexes.Add(indexName);

                _elasticClient.Indices.Create(indexName, c => c
                                              .Settings(s => s
                                                        .NumberOfShards(1)
                                                        .NumberOfReplicas(0))
                                              .Aliases(a => a.Alias(esType.RelationName)));
            }
        }
        public override IRootResolver CreateRootResolver(IEventFlowOptions eventFlowOptions)
        {
            // Disable SSL certificate validation
            ServicePointManager.ServerCertificateValidationCallback = delegate { return(true); };

            var url = Environment.GetEnvironmentVariable("ELASTICSEARCH_URL");

            if (string.IsNullOrEmpty(url))
            {
                Assert.Inconclusive("The environment variabel named 'ELASTICSEARCH_URL' isn't set. Set it to e.g. 'http://localhost:9200'");
            }

            _resolver = eventFlowOptions
                        .ConfigureElasticsearch(new Uri(url))
                        .UseElasticsearchReadModel <ElasticsearchTestAggregateReadModel>()
                        .CreateResolver();
            _elasticClient                = _resolver.Resolve <IElasticClient>();
            _readModelPopulator           = _resolver.Resolve <IReadModelPopulator>();
            _readModelDescriptionProvider = _resolver.Resolve <IReadModelDescriptionProvider>();
            _readModelStore               = _resolver.Resolve <IElasticsearchReadModelStore <ElasticsearchTestAggregateReadModel> >();

            return(_resolver);
        }
예제 #23
0
        public static void Main(string[] args)
        {
            EntityFrameworkProfiler.Initialize();

            Database.SetInitializer(new NullDatabaseInitializer <AnimalStoveDbContext>());
            Database.SetInitializer(new NullDatabaseInitializer <PersonStoveDbContext>());

            IRootResolver resolver = IocBuilder.New
                                     .UseAutofacContainerBuilder()
                                     .UseStove <StoveDemoBootstrapper>(false)
                                     .UseStoveEntityFramework()
                                     .UseStoveDapper()
                                     .UseStoveMapster()
                                     .UseStoveEventBus()
                                     .UseStoveDbContextEfTransactionStrategy()
                                     .UseStoveTypedConnectionStringResolver()
                                     .UseStoveNLog()
                                     .UseStoveBackgroundJobs()
                                     .UseStoveRedisCaching()
                                     .UseStoveRabbitMQ(configuration =>
            {
                configuration.HostAddress = "rabbitmq://localhost/";
                configuration.Username    = "******";
                configuration.Password    = "******";
                configuration.QueueName   = "Default";
                return(configuration);
            })
                                     .UseStoveHangfire(configuration =>
            {
                configuration.GlobalConfiguration
                .UseSqlServerStorage("Default")
                .UseNLogLogProvider();
                return(configuration);
            })
                                     .RegisterServices(r => r.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly()))
                                     .CreateResolver();

            //var someDomainService = resolver.Resolve<SomeDomainService>();
            //someDomainService.DoSomeStuff();

            var productDomainService = resolver.Resolve <ProductDomainService>();

            productDomainService.DoSomeStuff();

            resolver.Dispose();

            EntityFrameworkProfiler.Shutdown();

            Console.ReadKey();
        }
예제 #24
0
        public TestBase()
        {
            var services = new ServiceCollection();

            ConfigurationRootCreator.Create(services);

            Resolver = EventFlowOptions.New
                       .UseServiceCollection(services)
                       .RegisterModule <BookingDomainModule>()
                       .RegisterModule <EntityFrameworkEventStoreModule>()
                       .RegisterModule <CommandModule>()
                       .RegisterModule <CommandHandlersModule>()
                       .RegisterModule <EntityFrameworkReadModelModule>()
                       .RegisterModule <EntityFrameworkQueryHandlersModule>()
                       .RegisterServices(register =>
            {
                register.Register <IDbContextProvider <RestAirlineReadModelContext>, FakedEntityFramewokReadModelDbContextProvider>();
                register.Register <IDbContextProvider <EventStoreContext>, FakedEventStoreContextProvider>();
            })
                       .CreateResolver();

            CommandBus     = Resolver.Resolve <ICommandBus>();
            QueryProcessor = Resolver.Resolve <IQueryProcessor>();
        }
예제 #25
0
        public TestBase()
        {
            var services = new ServiceCollection();

            ConfigurationRootCreatorForTesting.Create(services);

            FlightAvailabilityId = FlightAvailabilityId.New;
            Resolver             = EventFlowOptions.New
                                   .UseServiceCollection(services)
                                   .RegisterModule <FlightAvailabilityDomainModule>()
                                   .RegisterServices(r => r.Register <IDbContextProvider <EventStoreContext>, FakedEventStoreContextProvider>())
                                   .CreateResolver();

            AggregateStore = Resolver.Resolve <IAggregateStore>();
        }
예제 #26
0
        public void Test()
        {
            IEventFlowOptions eventFlow = EventFlowOptions.New
                                          .AddDefaults(typeof(CustomerTests).Assembly);

            CustomerDefinition.Define(eventFlow);

            IRootResolver resolver = eventFlow.CreateResolver();
            ICommandBus   bus      = resolver.Resolve <ICommandBus>();

            CustomerId aggregateId = CustomerId.New;

            bus.PublishAsync(new CreateCustomer(aggregateId), CancellationToken.None);
            bus.PublishAsync(new DeleteCustomer(aggregateId), CancellationToken.None);
        }
예제 #27
0
        public static void Main(string[] args)
        {
            IRootResolver resolver = IocBuilder.New
                                     .UseAutofacContainerBuilder()
                                     .UseStoveWithNullables <StoveRavenDBDemoBootstrapper>()
                                     .UseStoveRavenDB(cfg =>
            {
                cfg.DefaultDatabase = "Stove";
                cfg.Urls            = new string[] { "http://localhost:8080/" };
                return(cfg);
            })
                                     .RegisterServices(r => r.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly()))
                                     .CreateResolver();

            using (resolver)
            {
                var service = resolver.Resolve <RavenDomainService>();
                service.DoSomeStuff();
            }
        }
예제 #28
0
        public static void Main(string[] args)
        {
            // EntityFrameworkProfiler.Initialize();

            IIocBuilder builder = IocBuilder.New
                                  .UseAutofacContainerBuilder()
                                  .UseStoveWithNullables(typeof(StoveMigratorBootstrapper))
                                  .UseStoveNLog()
                                  .UseStoveEntityFramework()
                                  .UseStoveMigrationParticipant()
                                  .UseStoveMigrator()
                                  .UseStoveMigratorDefaults();

            var options = new MigrationOptions();

            Parser.Default.ParseArguments(args, options);
            if (Parser.Default.ParseArguments(args, options))
            {
                if (options.Is(MigrationType.DbUp))
                {
                    Console.WriteLine("Selected Migration is only DbUp...");

                    builder.UseStoveDbUpMigrationStrategy();
                }
                else if (options.Is(MigrationType.DbContext))
                {
                    Console.WriteLine("Selected Migration is only DbContext...");

                    builder.UseStoveDbContextMigrationStrategy();
                }
                else if (options.Is(MigrationType.DbContextSeed))
                {
                    Console.WriteLine("Selected Migration is only DbContextSeed...");

                    builder.UseStoveDbContextSeedMigrationStrategy(configuration =>
                    {
                        configuration.Schema             = options.Schema;
                        configuration.Table              = options.Table;
                        configuration.TransactionTimeout = options.TransactionTimeout;
                        configuration.Enviroment         = options.Enviroment;
                        return(configuration);
                    });
                }
                else
                {
                    Console.WriteLine("Selected Migration is DbContext, DbUp and DbContextSeed...");

                    builder.UseStoveAllMigrationStrategies(configuration =>
                    {
                        configuration.Schema             = options.Schema;
                        configuration.Table              = options.Table;
                        configuration.TransactionTimeout = options.TransactionTimeout;
                        configuration.Enviroment         = options.Enviroment;
                        return(configuration);
                    });
                }
            }

            builder.RegisterServices(r => r.OnDisposing += (sender, eventArgs) => { Console.WriteLine("Stove.Migrator.Executer successfully executed and disposed."); });

            IRootResolver rootResolver = builder.CreateResolver();

            using (rootResolver)
            {
                var migrator = rootResolver.Resolve <MigrateExecuter>();
                migrator.Run();
            }

            Console.WriteLine("Press ENTER to exit...");

            Console.ReadLine();
        }
예제 #29
0
 protected T The <T>()
 {
     return(LocalResolver.Resolve <T>());
 }