Пример #1
0
        /// <inheritdoc />
        public (IMarkDocLogger logger, IReadOnlyCollection <IProcess> processes, Func <CancellationToken, ValueTask> executor) GenerateExecutor(IReadOnlyDictionary <string, IReadOnlyDictionary <string, string> > configuration)
        {
            var globalSettings = GetSettings <IGlobalSettings>(configuration);
            var linkerSettings = (LinkerSettings)GetSettings <ILinkerSettings>(configuration);
            var memberSettings = GetSettings <IMemberSettings>(configuration);
            var docSettings    = GetSettings <IDocSettings>(configuration);
            var logger         = TypeResolver.Resolve <IMarkDocLogger>();

            var memberProcess        = new DefiniteProcess("Assembly resolver", memberSettings.Paths.Count);
            var documentationProcess = new DefiniteProcess("Documentation resolver", docSettings.Paths.Count);
            var printerProcess       = new IndefiniteProcess("Printer");

            var processes = new IProcess[] { memberProcess, documentationProcess, printerProcess };

            return(logger, processes, async _ =>
            {
                var resolver = new Resolver(logger, memberProcess);
                var docResolver = new DocResolver(resolver, docSettings, logger, documentationProcess);

                await Task.WhenAll(resolver.ResolveAsync(memberSettings, globalSettings), docResolver.ResolveAsync())
                .ConfigureAwait(false);

                var linker = new Linker(resolver, linkerSettings);
                var diagrams = linkerSettings.Platform.Equals("3", StringComparison.InvariantCultureIgnoreCase)
          ? new EmptyDiagramResolver()
          : new MermaidResolver(linker) as IDiagramResolver;
                var composer = new TypeComposer(new Creator(false, linker.GetRawUrl()), docResolver, resolver, linker, diagrams);
                var printer = new PrinterMarkdown(composer, linker, printerProcess);

                await printer.Print(resolver.Types.Value.Values.SelectMany(Linq.XtoX), globalSettings.OutputPath)
                .ConfigureAwait(false);
            });
        }