コード例 #1
0
        public static void Run(
            IUnityContainer mainContainer,
            Func <List <IMicroservice> > microservicesFactory,
            bool useSignalRLog = true,
            bool verbose       = true,
            params IPollableEventSource[] ocassionallyConnectedSources)
        {
            lock (_lockObject)
            {
                // Double checkingif
                if (multiContainer != null || isRunning)
                {
                    return;
                }

                DbConfiguration.SetConfiguration(new TransientFaultHandlingDbConfiguration());
                mainContainer  = ContainerFactory.ResolveCommonDependenciesForMainContainer(mainContainer, useSignalRLog, verbose);
                multiContainer = new MultiMicroserviceContainer(
                    mainContainer.Resolve <IBus>(),
                    mainContainer.Resolve <ILogger>(),
                    microservicesFactory.Invoke());

                var inMemoryEventPublisher = mainContainer.Resolve <IInMemoryEventPublisher>();
                ocassionallyConnectedSources.ForEach(x => inMemoryEventPublisher.Register(x));

                multiContainer.Start();
                isRunning = true;
            }
        }
コード例 #2
0
        /// <summary>
        /// Creates a new event system (a container for your microservices)
        /// </summary>
        public static void Create(
            params Func <IMicroservice>[] microservicesFactories)
        {
            if (microservicesFactories.Length == 0)
            {
                throw new ArgumentOutOfRangeException("The user should provide at least one microservice factory");
            }

            lock (_lockObject)
            {
                // Double checking if
                if (multiContainer != null || isRunning)
                {
                    return;
                }

                DbConfiguration.SetConfiguration(new TransientFaultHandlingDbConfiguration());
                System.Data.Entity.Database.SetInitializer <EventStoreDbContext>(null);
                System.Data.Entity.Database.SetInitializer <EventQueueDbContext>(null);


                mainContainer = ResolveCommonDependenciesForMainContainer(UseSignalRLog, Verbose);

                var log = mainContainer.Resolve <ILogger>();
                PrintSystemInfo(log, microservicesFactories.Length);

                multiContainer = new MultiMicroserviceContainer(
                    mainContainer.Resolve <IBus>(),
                    mainContainer.Resolve <ILogger>(),
                    microservicesFactories.Select(f => f.Invoke()));

                multiContainer.Start();

                isRunning = true;
                log.Log($"The Event Centric System is now up and running!");
            }
        }