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; } }
/// <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!"); } }