public void LoadMetadataFromJson()
        {
            var svcProvider = new ServiceContainer();

            // Use StandardMetadataProvider
            var metadataProvider = new StandardMetadataProvider();

            svcProvider.AddService(typeof(IMetadataProvider), metadataProvider);
            svcProvider.AddService(typeof(ISerializerConfigService), new StandardSerializerConfigService(null));

            var metadataRepoFilePath = Path.Combine(Directory.GetCurrentDirectory(), @"MockData/SuperheroMetadata.json");

            var metadataRepo = new FlatFileRepo <DynamicObjectType>(
                metadataRepoFilePath,
                svcProvider.GetService(typeof(ISerializerConfigService)) as ISerializerConfigService,
                svcProvider
                );

            var dynamicMetadataProvider = new DynamicMetadataProvider();

            dynamicMetadataProvider.Load(metadataRepo);

            var metahumanObjType = dynamicMetadataProvider.GetDataType <ObjectType>("Headway.Dynamo.UnitTests.Mockdata.Metahuman");

            Assert.IsNotNull(metahumanObjType);
            var propSuperpower1 = metahumanObjType.GetPropertyByName("Superpower1");

            Assert.IsNotNull(propSuperpower1);
        }
        public void VerifyReflectionPropertiesOnDynamicObjectType()
        {
            // Use StandardMetadataProvider
            var metadataProvider = new StandardMetadataProvider();

            // Register Person as a dynamic object type and verify return value
            var dynamicPersonObjectType = metadataProvider.DynamicProvider.RegisterObjectType(typeof(Person).FullName, typeof(Person));

            Assert.IsNotNull(dynamicPersonObjectType);

            // Verify that DerivesFrom is System.Object
            Assert.AreEqual(dynamicPersonObjectType.DerivesFrom.FullName, "System.Object");

            // Verify that compile-time properties can be successfully found
            var firstNameProp = dynamicPersonObjectType.GetPropertyByName("FirstName");

            Assert.IsNotNull(firstNameProp);
            var lastNameProp = dynamicPersonObjectType.GetPropertyByName("LastName");

            Assert.IsNotNull(lastNameProp);
            var extraStuffProp = dynamicPersonObjectType.GetPropertyByName("ExtraStuff");

            Assert.IsNotNull(extraStuffProp);
            Assert.IsNotNull(extraStuffProp.DataType);
        }
        public void TestInitialize()
        {
            this.svcProvider = new ServiceContainer();
            var metadataProvider = new StandardMetadataProvider();

            this.svcProvider.AddService(typeof(IMetadataProvider), metadataProvider);
        }
        public void when_getting_metadata_then_returns_namespace()
        {
            var provider = new StandardMetadataProvider();
            var expected = typeof(given_a_metadata_provider).Namespace;

            var metadata = provider.GetMetadata(this);

            Assert.Contains(expected, metadata.Values);
            Assert.Contains(StandardMetadata.Namespace, metadata.Keys);
        }
Exemple #5
0
        public void when_getting_metadata_then_returns_namespace()
        {
            var provider = new StandardMetadataProvider();
            var expected = typeof(given_a_metadata_provider).Namespace;

            var metadata = provider.GetMetadata(this);

            Assert.Contains(expected, metadata.Values);
            Assert.Contains(StandardMetadata.Namespace, metadata.Keys);
        }
Exemple #6
0
        public void when_getting_metadata_then_returns_assembly_name()
        {
            var provider = new StandardMetadataProvider();
            var expected = typeof(given_a_metadata_provider).Assembly.GetName().Name;

            var metadata = provider.GetMetadata(this);

            Assert.IsTrue(metadata.Values.Contains(expected));
            Assert.IsTrue(metadata.Keys.Contains(StandardMetadata.AssemblyName));
        }
Exemple #7
0
        public void CreateContainer(IServiceCollection services, ILoggerFactory loggerFactory)
        {
            var serializer = new JsonTextSerializer();

            services.AddSingleton <ITextSerializer>(serializer);

            var metadataProvider = new StandardMetadataProvider();

            services.AddSingleton <IMetadataProvider>(metadataProvider);

            //services.AddScoped(provider =>
            //{
            //    Func<string, ICommandHandler> accessor = key =>
            //    {
            //        switch (key)
            //        {
            //            case "RegistrationProcessManagerRouter":
            //                return provider.GetService<RegistrationProcessManagerRouter>();
            //            case "OrderCommandHandler":
            //                return provider.GetService<OrderCommandHandler>();
            //            case "AnchorsAvailabilityHandler":
            //                return provider.GetService<AnchorsAvailabilityHandler>();
            //            case "AnchorAssignmentsHandler":
            //                return provider.GetService<AnchorAssignmentsHandler>();
            //            default:
            //                throw new KeyNotFoundException(string.Format("Key is {0}.", key));
            //        }
            //    };

            //    return accessor;
            //});

            services.AddScoped <ICommandHandler, RegistrationProcessManagerRouter>();
            services.AddScoped <ICommandHandler, OrderCommandHandler>();
            services.AddScoped <ICommandHandler, AnchorsAvailabilityHandler>();
            //services.AddScoped<ICommandHandler, ThirdPartyProcessorPaymentCommandHandler>("ThirdPartyProcessorPaymentCommandHandler");
            services.AddScoped <ICommandHandler, AnchorAssignmentsHandler>();

            services.AddSingleton <RegistrationProcessManagerRouter>();
            services.AddSingleton <PricedOrderViewModelGenerator>();
            services.AddSingleton <WorkshopViewModelGenerator>();
            services.AddSingleton <DraftOrderViewModelGenerator>();
            services.AddSingleton <AnchorAssignmentsViewModelGenerator>();
            services.AddSingleton <AnchorAssignmentsHandler>();
            services.AddSingleton <OrderEventHandler>();
            services.AddSingleton <IPricingService, PricingService>();

            // Conference management integration
            //container.RegisterType<global::Conference.ConferenceContext>(new TransientLifetimeManager(), new InjectionConstructor("ConferenceManagement"));

            OnCreateContainer(services, serializer, metadataProvider, loggerFactory);
        }
Exemple #8
0
        public void OnCreateContainer1(IServiceCollection services)
        {
            var serializer = new JsonTextSerializer();

            services.AddSingleton <ITextSerializer>(serializer);

            var metadataProvider = new StandardMetadataProvider();

            services.AddSingleton <IMetadataProvider>(metadataProvider);
            services.AddSingleton <IBlobStorage, SqlBlobStorage>();

            var eventBus   = new EventBus(new MessageSender(_localConnectionString, "SqlBus.Events"), serializer);
            var commandBus = new CommandBus(new MessageSender(_localConnectionString, "SqlBus.Commands"), serializer);

            var commandProcessor = new CommandProcessor(new MessageReceiver(_localConnectionString, "SqlBus.Commands"), serializer);
            var eventProcessor   = new EventProcessor(new MessageReceiver(_localConnectionString, "SqlBus.Events"), serializer);

            services.AddSingleton <IEventBus>(eventBus);
            services.AddSingleton <ICommandBus>(commandBus);
            services.AddSingleton <ICommandHandlerRegistry>(commandProcessor);
            services.AddSingleton <IEventHandlerRegistry>(eventProcessor);

            services.AddSingleton(provider =>
            {
                Func <string, IProcessor> accessor = key =>
                {
                    switch (key)
                    {
                    case "CommandProcessor":
                        return(commandProcessor);

                    case "EventProcessor":
                        return(eventProcessor);

                    default:
                        throw new KeyNotFoundException(string.Format("current {0} key wasn't found in service collection", key));
                    }
                };
                return(accessor);
            });

            // Event log database and handler.
            services.AddTransient(provider => new SqlMessageLog(provider.GetService <IDbContextScopeFactory>(),
                                                                provider.GetService <IAmbientDbContextLocator>(), serializer, metadataProvider));
            services.AddScoped <IEventHandler, SqlMessageLogHandler>();
            services.AddScoped <ICommandHandler, SqlMessageLogHandler>();

            services.AddSingleton <IPricingService, PricingService>();
        }
Exemple #9
0
        public static IEventSourcedRepository <SeatsAvailability> GetSeatsAvailabilityRepository()
        {
            var serializer = new JsonTextSerializer();

#if LOCAL
            Func <EventStoreDbContext> ctxFactory = () => new EventStoreDbContext("EventStore");
            return(new SqlEventSourcedRepository <SeatsAvailability>(ConferenceHelper.BuildEventBus(), serializer, ctxFactory));
#else
            var settings             = InfrastructureSettings.Read("Settings.xml");
            var eventSourcingAccount = CloudStorageAccount.Parse(settings.EventSourcing.ConnectionString);
            var eventStore           = new EventStore(eventSourcingAccount, settings.EventSourcing.SeatsAvailabilityTableName);
            var publisher            = new EventStoreBusPublisher(ConferenceHelper.GetTopicSender("eventsAvailability"), eventStore, new EventStoreBusPublisherInstrumentation("worker", false));
            var metadata             = new StandardMetadataProvider();
            return(new AzureEventSourcedRepository <SeatsAvailability>(eventStore, publisher, serializer, metadata, new MemoryCache("RepositoryCache")));
#endif
        }
        public void AddPropertyToDynamicObjectType()
        {
            // Use StandardMetadataProvider
            var metadataProvider = new StandardMetadataProvider();

            // Register Person as a dynamic object type and verify return value
            var dynamicPersonObjectType = metadataProvider.DynamicProvider.RegisterObjectType(typeof(Person).FullName, typeof(Person));

            Assert.IsNotNull(dynamicPersonObjectType);

            // Add a new string property
            dynamicPersonObjectType.AddProperty("Foo", IntegralType.String);

            var fooProp = dynamicPersonObjectType.GetPropertyByName("Foo");

            Assert.AreEqual(fooProp.FullName, "Headway.Dynamo.UnitTests.Mockdata.Person.Foo");
            Assert.AreEqual(fooProp.DataType.FullName, "System.String");
        }
Exemple #11
0
        public void TestInitialize()
        {
            this.svcProvider = new ServiceContainer();
            var metadataProvider = new StandardMetadataProvider();

            this.svcProvider.AddService(typeof(IMetadataProvider), metadataProvider);
            var standardSerializerConfig = new StandardSerializerConfigService();

            this.svcProvider.AddService(typeof(ISerializerConfigService), standardSerializerConfig);

            var personArray = new Person[]
            {
                new Person()
                {
                    Id          = 1,
                    FirstName   = "Fred",
                    LastName    = "Flintstone",
                    DateOfBirth = new DateTime(200)
                },
                new Person()
                {
                    Id          = 1,
                    FirstName   = "Wilma",
                    LastName    = "Flintstone",
                    DateOfBirth = new DateTime(201)
                },
                new Person()
                {
                    Id          = 1,
                    FirstName   = "Barney",
                    LastName    = "Rubble",
                    DateOfBirth = new DateTime(300)
                },
                new Person()
                {
                    Id          = 1,
                    FirstName   = "Betty",
                    LastName    = "Rubble",
                    DateOfBirth = new DateTime(301)
                }
            };

            this.personColl = personArray;
        }
        public static void Run(string connStr)
        {
            IMessageSender  sender     = new SqlMessageSender(connStr, "dbo.messages");
            ITextSerializer serializer = new JsonTextSerializer();
            IEventStore     eventStore = new SqlEventStore(connStr, "dbo.events");

            IEventBus         eventBus     = new EventBus(sender, serializer);
            IMetadataProvider metaProvider = new StandardMetadataProvider();

            IEventSourcedRepository <AppointmentAggregate> repo = new
                                                                  EventSourcedRepository <AppointmentAggregate>(eventStore, eventBus, serializer, metaProvider);
            ICommandDispatcher cmdDispatcher = new CommandDispatcher();

            cmdDispatcher.Register(new AppointmentCommandHandler(repo));

            IMessageReceiver cmdReceiver = new SqlMessageReceiver(connStr, "dbo.messages");

            CommandProcessor commandProcessor = new CommandProcessor(cmdReceiver, serializer, cmdDispatcher);

            commandProcessor.Start();
        }
Exemple #13
0
        public void TestInitialize()
        {
            this.svcProvider = new ServiceContainer();

            var metadataProvider = new StandardMetadataProvider();

            this.svcProvider.AddService(typeof(IMetadataProvider), metadataProvider);
            this.svcProvider.AddService(typeof(ISerializerConfigService), new StandardSerializerConfigService(null));

            var restApiRepo = new FlatFileRepo <RestApi>(
                @"MockData/RestApis.json",
                svcProvider.GetService(typeof(ISerializerConfigService)) as ISerializerConfigService,
                svcProvider
                );

            var restApiService = new RestApiServiceImpl();

            restApiService.Load(restApiRepo.GetQueryable());

            this.svcProvider.AddService(typeof(IRestApiService), restApiService);
        }
        public static void Run(string connStr)
        {
            IMessageSender  sender     = new SqlMessageSender(connStr, "dbo.messages");
            ITextSerializer serializer = new JsonTextSerializer();

            IEventStore       eventStore   = new SqlEventStore(connStr, "dbo.events");
            IEventBus         eventBus     = new EventBus(sender, serializer);
            IMetadataProvider metaProvider = new StandardMetadataProvider();
            IReadModelStorage <AppointmentReadModel> readModelStorage = new InMemeoryStorage <AppointmentReadModel>();

            IEventSourcedRepository <AppointmentAggregate> repo = new
                                                                  EventSourcedRepository <AppointmentAggregate>(eventStore, eventBus, serializer, metaProvider);

            IEventDispatcher evtDispatcher = new EventDispatcher();

            evtDispatcher.Register(new AppointmentEventHandler(readModelStorage));

            var evtReceiver = new SqlEventReceiver(new SqlEventStore(connStr, "dbo.events"));

            var eventProcessor = new EventProcessor(evtReceiver, serializer, evtDispatcher);

            eventProcessor.Start();
        }
Exemple #15
0
 public void TestInitialize()
 {
     this.MetadataProvider = new StandardMetadataProvider();
 }
        static partial void OnCreateContainer(UnityContainer container)
        {
            var serializer = new JsonTextSerializer();

            container.RegisterInstance <ITextSerializer>(serializer);
            var metadata = new StandardMetadataProvider();

            container.RegisterInstance <IMetadataProvider>(metadata);

            var instrumentationEnabled = CloudConfigurationManager.GetSetting("InstrumentationEnabled") == "true";

            // command bus

            var settings = InfrastructureSettings.Read(HttpContext.Current.Server.MapPath(@"~\bin\Settings.xml"));

            if (!Conference.Common.MaintenanceMode.IsInMaintainanceMode)
            {
                new ServiceBusConfig(settings.ServiceBus).Initialize();
            }
            var commandBus = new CommandBus(new TopicSender(settings.ServiceBus, "conference/commands"), metadata, serializer);

            var synchronousCommandBus = new SynchronousCommandBusDecorator(commandBus);

            container.RegisterInstance <ICommandBus>(synchronousCommandBus);
            container.RegisterInstance <ICommandHandlerRegistry>(synchronousCommandBus);

            // blob
            var blobStorageAccount = CloudStorageAccount.Parse(settings.BlobStorage.ConnectionString);

            container.RegisterInstance <IBlobStorage>(new CloudBlobStorage(blobStorageAccount, settings.BlobStorage.RootContainerName));

            // support for inline command processing

            container.RegisterType <ICommandHandler, OrderCommandHandler>("OrderCommandHandler");
            container.RegisterType <ICommandHandler, ThirdPartyProcessorPaymentCommandHandler>("ThirdPartyProcessorPaymentCommandHandler");
            container.RegisterType <ICommandHandler, SeatAssignmentsHandler>("SeatAssignmentsHandler");

            container.RegisterType <DbContext, PaymentsDbContext>("payments", new TransientLifetimeManager(), new InjectionConstructor("Payments"));
            container.RegisterType <IDataContext <ThirdPartyProcessorPayment>, SqlDataContext <ThirdPartyProcessorPayment> >(
                new TransientLifetimeManager(),
                new InjectionConstructor(new ResolvedParameter <Func <DbContext> >("payments"), typeof(IEventBus)));

            container.RegisterType <IPricingService, PricingService>(new ContainerControlledLifetimeManager());

            var topicSender = new TopicSender(settings.ServiceBus, "conference/events");

            container.RegisterInstance <IMessageSender>(topicSender);
            var eventBus = new EventBus(topicSender, metadata, serializer);

            container.RegisterInstance <IEventBus>(eventBus);

            var eventSourcingAccount = CloudStorageAccount.Parse(settings.EventSourcing.ConnectionString);
            var eventStore           = new EventStore(eventSourcingAccount, settings.EventSourcing.OrdersTableName);

            container.RegisterInstance <IEventStore>(eventStore);
            container.RegisterInstance <IPendingEventsQueue>(eventStore);
            container.RegisterType <IEventStoreBusPublisher, EventStoreBusPublisher>(
                new ContainerControlledLifetimeManager(),
                new InjectionConstructor(
                    new TopicSender(settings.ServiceBus, "conference/eventsOrders"),
                    typeof(IPendingEventsQueue),
                    new EventStoreBusPublisherInstrumentation("web.public - orders", instrumentationEnabled)));
            container.RegisterType(
                typeof(IEventSourcedRepository <>),
                typeof(AzureEventSourcedRepository <>),
                new ContainerControlledLifetimeManager(),
                new InjectionConstructor(typeof(IEventStore), typeof(IEventStoreBusPublisher), typeof(ITextSerializer), typeof(IMetadataProvider), new InjectionParameter <ObjectCache>(null)));

            // to satisfy the IProcessor requirements.
            container.RegisterType <IProcessor, PublisherProcessorAdapter>("EventStoreBusPublisher", new ContainerControlledLifetimeManager());
        }