// Boostraping conveyor private static Finalizer BootstrapContainer() { var logger = LogManager.GetCurrentClassLogger(); var container = new IoCContainer(); container.SetLogger(logger); Injection.RegisterInjectionProvider(container); // Preparing jobs and finalizer // This will be our jobs var processingInts = Enumerable.Range(0, 1000).ToList(); container.RegisterSingle <IEnumerable <int> >(processingInts); // And in "collector" we will accumulate results. container.RegisterSingle("collector", new ConcurrentBag <int>()); // To find out when we can close application we use CountFinalizer Action inTheEnd = () => logger.Info($"Result: {string.Join(",", container.Get<IEnumerable<int>>("collector"))}"); var finalizer = new CountFinalizer(processingInts.Count, inTheEnd); // And boostrapping Conveyor itself Conveyor.Init(logger) .ScanForBlueprints() .WithMetricsService(new MetricsServiceSettings { BaseAddress = "http://localhost:5001/", CorsAddresses = new List <string> { "http://localhost/*" }, MetricsConfig = new MetricsConfig { IncludeLastLogsFrom = new List <string> { "mainLogFile" }, CountOfLogLines = 100 } }) .WithSupplier("IntsSupplier", Injection.InjectionProvider.Get <IntegersSupplier>()) .WithFinalizer(finalizer) .Start(); return(finalizer); }
public void ConveyorWithPipelineCallShouldWorksWell() { Stopwatch timer = Stopwatch.StartNew(); // GIVEN var injectionProvider = new IoCContainer(); var listCollector = new ListCollector(); injectionProvider.RegisterSingle(new List <int> { 1, 2, 3, 4, 5 }); injectionProvider.Register <TestIntSource>(); injectionProvider.Register <TestMultiplicatorStep>(); injectionProvider.Register <TestPipelinesBuilder>(); injectionProvider.RegisterSingle(listCollector); Contracts.Dependencies.Injection.RegisterLogger(mLogger); Contracts.Dependencies.Injection.RegisterInjectionProvider(injectionProvider, false); var count = 10; var range = Enumerable.Range(1, count).ToList(); var builder = new TestPipelinesBuilder(); // WHEN var countFinalizer = new CountFinalizer(count); Conveyor.Init(mLogger) .WithBlueprint(builder.CreateIntMultPipeline()) .WithBlueprint(builder.CreatePipelineWithCallOfAnother()) .WithPipelineFinalizer("TestPipelineWithCallOfAnother", countFinalizer.Finalization) .WithSupplier("IntsSupplier", new LabeledIntSupplier(range, "TestPipelineWithCallOfAnother")) .Start(); countFinalizer.GetWaitTask().Wait(); // THEN listCollector.Lists.Count.Should().Be(count, "All lists should be added to list collector"); listCollector.Lists.Values.ToList().ForEach(el => el.ShouldAllBeEquivalentTo(new List <int> { 2, 4, 6, 8, 10 })); listCollector.Lists.Keys.ToList().ShouldBeEquivalentTo(range.Select(el => $"id:{el}").ToList()); timer.Stop(); }
public void SimpleConveyorShouldWorksWell() { // GIVEN var injectionProvider = new IoCContainer(); var listCollector = new ListCollector(); injectionProvider.RegisterSingle(new List <int> { 1, 2, 3, 4, 5 }); injectionProvider.Register <TestIntSource>(); injectionProvider.Register <TestMultiplicatorStep>(); injectionProvider.Register <TestPipelinesBuilder>(); injectionProvider.RegisterSingle(listCollector); Contracts.Dependencies.Injection.RegisterLogger(mLogger); Contracts.Dependencies.Injection.RegisterInjectionProvider(injectionProvider, false); var range = new List <int> { 1, 2, 3, 4, 5, 6, 7 }; // WHEN var countFinalizer = new CountFinalizer(range.Count); Conveyor.Init(mLogger) .ScanForBlueprints() .WithSupplier("IntsSupplier", new IntSupplier(range)) .WithFinalizer(countFinalizer) .Start(); countFinalizer.GetWaitTask().Wait(); // THEN listCollector.Lists.Count.Should().Be(7, "All lists should be added to list collector"); listCollector.Lists.Values.ToList().ForEach(el => el.ShouldAllBeEquivalentTo(new List <int> { 2, 4, 6, 8, 10 })); listCollector.Lists.Keys.ShouldBeEquivalentTo(range.Select(el => $"id:{el}")); }