/// <summary>
        /// 通过构建器获取命名空间
        /// </summary>
        /// <param name="currentBuilder"></param>
        /// <param name="task"></param>
        /// <returns></returns>
        public static string GetNameSpace(this BuilderOptions currentBuilder, IBuilderTask task)
        {
            var currentTable = task.CurrentTable.CsName;
            var res          = $"{task?.Project?.ProjectInfo?.NameSpace}.{currentBuilder?.ReplaceTablePath(currentTable).Replace("/", ".")}";

            return(res);
        }
Esempio n. 2
0
        static void Main(string[] args)
        {
            var serviceProvider = new ServiceCollection()
                                  .AddLogging(builder => { builder.AddConsole(); })
                                  .AddSingleton <IDirectoryService, DirectoryService>()
                                  .AddSingleton <IFindAndDeleteService, FindAndDeleteService>()
                                  .AddSingleton <IFindAndRenameService, FindAndRenameService>()
                                  .AddSingleton <IFindAndReplaceService, FindAndReplaceService>()
                                  .AddTransient <IServiceFromTemplateBuilder, PartyServiceFromPartyTemplateBuilder>()
                                  .BuildServiceProvider();


            var builderOptions = new BuilderOptions()
            {
                DestTemplatePath = @"C:\temp\Output\"
            };
            var destDir = builderOptions.DestTemplatePath;

            if (Directory.Exists(destDir))
            {
                Directory.Delete(destDir, true);
            }

            var builderService = serviceProvider.GetService <SampleBuilder>();

            builderService.BuildService(builderOptions);
        }
 public Builder(BuilderOptions options, bool suppressEllipsis)
 {
     _sb = new StringBuilder();
     _suppressEllipsis = suppressEllipsis;
     _options          = options;
     _currentLimit     = Math.Min(_options.MaximumLineLength, _options.MaximumOutputLength);
 }
 public Builder(BuilderOptions options, bool suppressEllipsis)
 {
     _sb = new StringBuilder();
     _suppressEllipsis = suppressEllipsis;
     _options = options;
     _currentLimit = Math.Min(_options.MaximumLineLength, _options.MaximumOutputLength);
 }
Esempio n. 5
0
        /// <summary>
        /// 初始化构建器
        /// </summary>
        public List <BuilderOptions> InitBuilder(Project project)
        {
            var page = new BuilderPageParam {
                PageNumber = 1, PageSize = 1000, BuilderType = BuilderType.Builder
            };
            //获取所有构建器
            var builderParam = page;
            var allBuilders  = _serviceProvider.GetService <IBuilderService>().GetBuilderPage(builderParam).Result.Datas.ToList();
            //获取所有模板
            var templates = _serviceProvider.GetService <ITemplateService>().GetTemplatePageAsync(page).Result.Datas
                            .ToList();
            var templateIds       = templates.Select(x => x.Id);
            var builderTemplateId = allBuilders.Select(x => x.TemplateId);
            //通过差集计算出没有构建器的模板
            var needInsert = templateIds.Except(builderTemplateId);
            //筛选出模板
            var ts = templates.Where(x => needInsert.Contains(x.Id)).ToList();
            var defaultProjectId = project.Id;
            //添加模板对应的构建器 名称和路径均为模板名
            var builders = ts.Select(x =>
            {
                var name    = Path.GetFileNameWithoutExtension(x.TemplateName);
                var builder = new BuilderOptions($"{x.TemplateType}_{name}", name, "", name)
                {
                    TemplateId       = x.Id,
                    DefaultProjectId = defaultProjectId
                };
                return(builder);
            }).ToList();
            var options = builders.Select(b => _serviceProvider.GetService <IBuilderService>().AddBuilder(b).Result).ToList();

            return(options);
        }
Esempio n. 6
0
        static unsafe void Main(string[] args)
        {
            Span <byte> s;

            //var x = File.OpenWrite("b.dll");
            //AheadOfTimeActivator.WriteImplementation<TestClass>(x);
            //var y = File.OpenWrite("a.dll");
            //AheadOfTimeActivator.WriteImplementation<TestClass2>(y);
            //x.Flush();
            //y.Flush();
            //var user32 = LibraryActivator.CreateInstance<TestClass>("user32.dll");
            //user32.MessageBox(IntPtr.Zero, "SuperInvoke".ToCharArray(), "Hello from SuperInvoke!".ToCharArray(), 0);
            if (AotTest)
            {
                var libBuilder = new LibraryBuilder();
                var opts       = BuilderOptions.GetDefault(typeof(TestClass2));
                libBuilder.Add(opts);
#if NET47
                var bytes = libBuilder.BuildBytes();
                File.WriteAllBytes("c.dll", bytes);
#else
                libBuilder.Build();
#endif
            }

            var lib = LibraryActivator.CreateInstance <TestClass2>("user32");

            var a = Marshal.StringToHGlobalAnsi("Test 1");
            var b = Marshal.StringToHGlobalAnsi("Hello from SuperInvoke!");
            lib.MessageBox(default, (char *)a, (char *)b, 0);
 /// <summary>
 /// Filters a sequence of entities based on a predicate builder.
 /// </summary>
 /// <typeparam name="T">Entity type.</typeparam>
 /// <param name="source">An entity sequence.</param>
 /// <param name="builder">A predicate builder.</param>
 /// <param name="options">Builder options</param>
 public static IQueryable <T> Build <T>(
     [NotNull] this IQueryable <T> source,
     [NotNull] Func <ILogicOperation <T>, IQueryBuilderResult <T> > builder,
     BuilderOptions options)
 {
     return(source.Build(
                builder,
                new OperationStrategy(options)));
 }
Esempio n. 8
0
 public static BuilderOptions UseMsSqlPersistent(this BuilderOptions options, Func <IResolverContext, IDbContextProvider> dbProviderFactory)
 {
     options.ServiceRegistration.Register <IEventStore, EventStore>(Lifetime.Singleton);
     options.ServiceRegistration.RegisterGeneric(typeof(IReadModeRepository <>), typeof(ReadModelRepository <>), Lifetime.Singleton);
     options.ServiceRegistration.Register(dbProviderFactory);
     options.ServiceRegistration.Register <IReadModelDbContextProvider>(dbProviderFactory);
     options.ServiceRegistration.Register <IAggregateDbContextProvider>(dbProviderFactory);
     return(options);
 }
Esempio n. 9
0
        internal static NativeApiContainer UseStrategyOne(UnmanagedLibrary unmanagedLibrary, Type type, Strategy strat)
        {
            var ctx = new NativeApiContext(unmanagedLibrary, strat);

            return((NativeApiContainer)Activator.CreateInstance(
                       (GetImplementationInDomain(type, AppDomain.CurrentDomain) ?? LibraryBuilder
                        .CreateAssembly(BuilderOptions.GetDefault(type))
                        .GetTypes().FirstOrDefault(type.IsAssignableFrom)) ??
                       throw new InvalidOperationException("Failed to create type."), ctx));
        }
Esempio n. 10
0
        new public string ToString()
        {
            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.AppendLine(DeclareBuilderOption);
            stringBuilder.AppendLine(BuilderOptions.ToString(BuilderOptionLine + " {0}={1}"));
            stringBuilder.AppendLine(DeclareBuilderOption);
            stringBuilder.AppendLine(Code);
            return stringBuilder.ToString();
        }
Esempio n. 11
0
 public DyLinker(FileLookup lookup, BuilderOptions options, DyTuple args)
 {
     this.Lookup         = lookup;
     this.BuilderOptions = options;
     this.lang           = new Lang(args)
     {
         FileName = nameof(lang), Id = 1
     };
     Units.Add(null);
 }
        /// <summary>
        /// 获取CodeFirst名称
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public static string GetName(this BuilderOptions builder, string tableName)
        {
            if (builder == null)
            {
                return(tableName);
            }
            var convert     = new DefaultWordsConvert(builder.Mode);
            var convertName = convert.Convert(tableName);

            return($"{builder.Prefix}{convertName}{builder.Suffix}");
        }
Esempio n. 13
0
        public static void Main(string[] args)
        {
            var builder = new LibraryBuilder();

            builder.Add(BuilderOptions.GetDefault(typeof(GL)));
            File.WriteAllBytes("il.dll", builder.BuildBytes());
            Process.Start
            (
                @"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools\ildasm.exe",
                "/out=\"il.il\" \"il.dll\""
            )?.WaitForExit();
        }
Esempio n. 14
0
        /// <summary>
        /// 新增构建器
        /// </summary>
        /// <param name="builderOptions"></param>
        /// <param name="autoSave"></param>
        /// <returns></returns>
        public async Task <BuilderOptions> AddBuilder(BuilderOptions builderOptions, bool autoSave = false)
        {
            _ = await GetAndCheckTemplate(builderOptions);

            builderOptions = await _builderRep.InsertAsync(builderOptions);

            if (autoSave)
            {
                UnitOfWork.Commit();
            }
            return(builderOptions);
        }
Esempio n. 15
0
        public void BuildService(BuilderOptions builderOptions)
        {
            var destDir = builderOptions.DestTemplatePath;

            if (Directory.Exists(destDir))
            {
                Directory.Delete(destDir, true);
            }

            _directoryService.DirectoryCopy(@"C:\Source\Repos\party-model", destDir, true);
            //FilesFindAndDelete(destDir, "PartyType", true);
            //FilesFindAndDelete(destDir, "RelationshipType", true);
            var projectName = "Company.Link";

            _findAndRenameService.DirectoryFindAndRename(destDir, "Company.PartyModel", projectName, true);
            _findAndRenameService.DirectoryFindAndRename(destDir, "PartyModel", "ProgramScheduleStations", true);

            _findAndRenameService.FilesFindAndRename(destDir, "Company.PartyModel", projectName, true);
            _findAndRenameService.FilesFindAndRename(destDir, "PartyModel", "ProgramScheduleStations", true);

            _findAndRenameService.FilesFindAndRename(destDir, "Parties", "ProgramSchedules", true);


            _findAndRenameService.FilesFindAndRename(destDir, "PartyFrom", "Station", true);

            _findAndRenameService.FilesFindAndRename(destDir, "PartyTo", "ProgramSchedule", true);

            _findAndRenameService.FilesFindAndRename(destDir, "PartyType", "ProgramScheduleType", true);

            //FilesFindAndRename(destDir, "party", "program_schedule", true);

            _findAndReplaceService.FileContentFindAndReplace(destDir, "Company.PartyModel", projectName, true);

            _findAndReplaceService.FileContentFindAndReplace(destDir, "PartyModel", "ProgramScheduleStations", true);
            _findAndReplaceService.FileContentFindAndReplace(destDir, "PARTYMODEL", "PROGRAMSCHEDULESTATIONS", true);


            _findAndReplaceService.FileContentFindAndReplace(destDir, "PartyFrom", "Station", true);

            _findAndReplaceService.FileContentFindAndReplace(destDir, "PartyTo", "ProgramSchedule", true);

            _findAndReplaceService.FileContentFindAndReplace(destDir, "PartyFromExternal", "StationExternal", true);
            _findAndReplaceService.FileContentFindAndReplace(destDir, "PartyToExternal", "ProgramScheduleExternal", true);

            _findAndReplaceService.FileContentFindAndReplace(destDir, "Parties", "ProgramSchedules", true);
            _findAndReplaceService.FileContentFindAndReplace(destDir, "parties", "programSchedules", true, new[] { "sql", "esql" });

            _findAndReplaceService.FileContentFindAndReplace(destDir, "PartyType", "ProgramScheduleType", true);

            //FileContentFindAndReplace(destDir, "Relationship", "", true);

            _findAndReplaceService.FileContentFindAndReplace(destDir, "party", "program_schedule", true, null, new string[] { "sql", "esql" });
        }
 public Visitor(
     CommonObjectFormatter formatter,
     BuilderOptions builderOptions,
     CommonPrimitiveFormatterOptions primitiveOptions,
     CommonTypeNameFormatterOptions typeNameOptions,
     MemberDisplayFormat memberDisplayFormat)
 {
     _formatter = formatter;
     _builderOptions = builderOptions;
     _primitiveOptions = primitiveOptions;
     _typeNameOptions = typeNameOptions;
     _memberDisplayFormat = memberDisplayFormat;
 }
 public Visitor(
     CommonObjectFormatter formatter,
     BuilderOptions builderOptions,
     CommonPrimitiveFormatterOptions primitiveOptions,
     CommonTypeNameFormatterOptions typeNameOptions,
     MemberDisplayFormat memberDisplayFormat)
 {
     _formatter           = formatter;
     _builderOptions      = builderOptions;
     _primitiveOptions    = primitiveOptions;
     _typeNameOptions     = typeNameOptions;
     _memberDisplayFormat = memberDisplayFormat;
 }
Esempio n. 18
0
        private static async Task Main(
            string[] arguments,
            CancellationToken cancellationToken,
            bool errorIfToolConfigNotExists = false
            )
        {
            Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
            _errorIfToolConfigNotExists         = errorIfToolConfigNotExists;
            string enviroinmentVarsConfigPath        = Path.Combine(Environment.CurrentDirectory, _enviroinmentVarsConfigFile);
            string buildToolConfigPath               = Path.Combine(Environment.CurrentDirectory, _dotnetBuildToolConfig);
            Task <BuilderOptions> setToolOptionsTask = SetToolOptionsAsync(buildToolConfigPath);
            Task setEnvVarsTask = SetEnviroinmentVariablesAsync(enviroinmentVarsConfigPath);

            BuilderOptions options = await setToolOptionsTask;
            await          setEnvVarsTask;

            await DotNetBuilder.CreatBuilderAsync(options, cancellationToken).ExecuteTargetsAsync(arguments);
        }
Esempio n. 19
0
        private async Task <Template> GetAndCheckTemplate(BuilderOptions builderOptions)
        {
            var template = await _templateRepository.GetAsync(builderOptions.TemplateId);

            if (template == null)
            {
                throw new Exception("新增失败!找不到相关模板");
            }
            if (template.TemplateType == TemplateType.UnKnow)
            {
                throw new Exception("新增失败!模板类型未知");
            }
            if (builderOptions.Type == BuilderType.GlobalBuilder && template.TemplateType != TemplateType.Global)
            {
                throw new Exception("新增失败!全局构造器必须搭配全局模板");
            }
            return(template);
        }
Esempio n. 20
0
        //not suggest to use relation database.
        static void Main(string[] args)
        {
            var dbContextProvider = new DbContextProvider();
            var builderOption     = BuilderOptions
                                    .New()
                                    .UseStructureMapRegistration()
                                    .UseDefaultConfig()
                                    .UseMsSqlPersistent(a => dbContextProvider)
                                    .Register(typeof(UserRegisterCommand).Assembly);

            var resolver = builderOption.ServiceRegistration.CreateResolver();

            //Command

            var userQueryService = resolver.Resolve <QueryService <UserReadModel> >();
            var todoQueryService = resolver.Resolve <QueryService <ToDoReadModel> >();
            var bus = resolver.Resolve <IBus>();

            foreach (var i in Enumerable.Range(1, 100))
            {
                Console.WriteLine(i);
                var personId = Guid.NewGuid();
                bus.Send(new UserRegisterCommand {
                    AggregateId = personId, UserName = $"Sam Pang{i}", Password = $"Password{i}"
                });
                bus.Send(new CreateToDoCommand {
                    AggregateId = Guid.NewGuid(), Title = $"Todo Title{i}", Description = $"Todo Description{i}", UserId = personId
                });
            }

            //Query
            var persons = userQueryService.GetAll();
            var todos   = todoQueryService.GetAll();

            persons.ForEach(a =>
            {
                Console.WriteLine($"{a.Id},{a.UserName},{a.Password}");
                foreach (var toDo in todos.Where(t => t.Creater == a.Id))
                {
                    Console.WriteLine($"{toDo.Id},{toDo.Title},{toDo.Description}");
                }
            });
            Console.ReadLine();
        }
Esempio n. 21
0
        static void Main(string[] args)
        {
            var builderOption = BuilderOptions
                                .New()
                                .UseStructureMapRegistration()
                                .UseDefaultConfig()
                                .UseMongoPersistent()
                                .Register(typeof(UserCommandHandle).Assembly);

            var resolver = builderOption.ServiceRegistration.CreateResolver();

            //Command

            var userQueryService = resolver.Resolve <QueryService <UserReadModel> >();
            var todoQueryService = resolver.Resolve <QueryService <ToDoReadModel> >();

            foreach (var i in Enumerable.Range(1, 1000))
            {
                var personId = Guid.NewGuid();
                var bus      = resolver.Resolve <IBus>();
                bus.Send(new UserRegisterCommand {
                    AggregateId = personId, UserName = $"Sam Pang{i}", Password = $"Password{i}"
                });
                bus.Send(new CreateToDoCommand {
                    AggregateId = Guid.NewGuid(), Title = $"Todo Title{i}", Description = $"Todo Description{i}", UserId = personId
                });
            }

            //Query
            var persons = userQueryService.GetAll();

            persons.ForEach(a =>
            {
                Console.WriteLine($"{a.Id},{a.UserName},{a.Password}");
                Console.WriteLine($"Dodo list count:{a.MyTodoList.Count}");
                a.MyTodoList.ForEach(t =>
                {
                    var todo = todoQueryService.GetById(t);
                    Console.WriteLine($"{todo.Id},{todo.Title},{todo.Description}");
                });
            });

            Console.ReadLine();
        }
Esempio n. 22
0
        public async Task TestProjectBuilderOptions()
        {
            using var scope = ServiceProvider.CreateScope();
            var fsql     = ServiceProvider.GetService <IFreeSql <FsBuilder> >();
            var template = fsql.Select <Template>().ToOne();
            var b        = new BuilderOptions
            {
                Mode       = ConvertMode.None,
                Name       = "测试构建器",
                OutPutPath = "Test",
                Prefix     = "",
                Suffix     = "",
                TemplateId = template.Id,
                Type       = BuilderType.Builder
            };

            b.Validate();
            var id = fsql.Insert <BuilderOptions>().AppendData(b).ExecuteIdentity();

            Assert.True(id > 0);
        }
Esempio n. 23
0
        public Builder(BuilderOptions options, Func <Tuple <FetchResult, ExtractResult, ScrapeResult>, Result> transform = null)
        {
            transform = transform ?? Build;

            _input = new JoinBlock <FetchResult, ExtractResult, ScrapeResult>(new GroupingDataflowBlockOptions
            {
                Greedy = true
            });

            _output = new TransformBlock <Tuple <FetchResult, ExtractResult, ScrapeResult>, Result>(transform, new ExecutionDataflowBlockOptions
            {
                MaxDegreeOfParallelism = -1
            });

            var linkOptions = new DataflowLinkOptions
            {
                PropagateCompletion = true
            };

            _input.LinkTo(_output, linkOptions);
        }
Esempio n. 24
0
        private static IList <FunSet> Compile(IEnumerable <string> files, BuilderOptions buildOptions, out List <BuildMessage> warns)
        {
            var funColl = new List <FunSet>();

            warns = new List <BuildMessage>();

            foreach (var file in files)
            {
                var linker = new DyLinker(FileLookup.Create(Path.GetDirectoryName(file)), buildOptions);
                var cres   = linker.Make(SourceBuffer.FromFile(file));
                var funs   = new FunSet();
                funs.Funs     = new Dictionary <string, DyFunction>(StringComparer.OrdinalIgnoreCase);
                funs.FileName = file;

                if (!cres.Success)
                {
                    throw new DyBuildException(cres.Messages);
                }

                warns.AddRange(cres.Messages.Where(m => m.Type == BuildMessageType.Warning));
                var ctx = DyMachine.CreateExecutionContext(cres.Value);
                funs.Context = ctx;
                DyMachine.Execute(ctx);

                foreach (var v in DyMachine.DumpVariables(ctx))
                {
                    if (v.Value is DyFunction fn)
                    {
                        funs.Funs.Remove(v.Name);
                        funs.Funs.Add(v.Name, fn);
                    }
                }

                funColl.Add(funs);
            }

            return(funColl);
        }
        /// <summary>
        /// 如果不是系统类型则自动转换成构建器生成的类名
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        public static string ToBuilderType(this BuilderOptions builder, Type type)
        {
            if (type == null)
            {
                return(string.Empty);
            }
            var res = Reflection.SystemCsType(type);

            if (!string.IsNullOrWhiteSpace(res))
            {
                return(res);
            }
            if (Reflection.IsCollection(type))
            {
                var typeDefinition = type.GetGenericTypeDefinition();
                var types          = string.Join(',', type.GetGenericArguments().Select(x =>
                {
                    var sysType = Reflection.SystemCsType(x);
                    return(string.IsNullOrWhiteSpace(sysType) ? builder.GetName(x.Name) : sysType);
                }));
                var collectionType = typeDefinition == typeof(IEnumerable <>) ? "IEnumerable" :
                                     typeDefinition == typeof(IReadOnlyCollection <>) ? "IReadOnlyCollection" :
                                     typeDefinition == typeof(IReadOnlyList <>) ? "IReadOnlyList" :
                                     typeDefinition == typeof(ICollection <>) ? "ICollection" :
                                     typeDefinition == typeof(IList <>) ? "IList" :
                                     typeDefinition == typeof(List <>) ? "List" :
                                     typeDefinition == typeof(IDictionary <,>) ? "IDictionary" :
                                     typeDefinition == typeof(Dictionary <,>) ? "Dictionary" : "";

                return($"{collectionType}<{types}>");
            }

            if (Reflection.IsEnum(type))
            {
                return(type.FullName);
            }
            return(builder.GetName(type.Name));
        }
        public static string ToBuilderTypePk(this BuilderOptions builder, ColumnInfo columnInfo)
        {
            var type = columnInfo.CsType;

            if (type == null)
            {
                return(string.Empty);
            }
            var res = Reflection.SystemCsType(type);

            if (!string.IsNullOrWhiteSpace(res))
            {
                return(res);
            }
            if (Reflection.IsCollection(type))
            {
                var typeDefinition = type.GetGenericTypeDefinition();
                var typeStr        = columnInfo.Table.Primarys?.FirstOrDefault()?.CsType;
                var collectionType = typeDefinition == typeof(IEnumerable <>) ? "IEnumerable" :
                                     typeDefinition == typeof(IReadOnlyCollection <>) ? "IReadOnlyCollection" :
                                     typeDefinition == typeof(IReadOnlyList <>) ? "IReadOnlyList" :
                                     typeDefinition == typeof(ICollection <>) ? "ICollection" :
                                     typeDefinition == typeof(IList <>) ? "IList" :
                                     typeDefinition == typeof(List <>) ? "List" :
                                     typeDefinition == typeof(IDictionary <,>) ? "IDictionary" :
                                     typeDefinition == typeof(Dictionary <,>) ? "Dictionary" : "";

                return($"{collectionType}<{typeStr}>");
            }

            if (Reflection.IsEnum(type))
            {
                return(type.FullName);
            }
            return(Reflection.SystemCsType(columnInfo.Table.Primarys?.FirstOrDefault()?.CsType));
        }
Esempio n. 27
0
        public static BuilderOptions CreateBuildOptions(DyaOptions options)
        {
            var ret = new BuilderOptions
            {
                Debug            = options.Debug,
                NoOptimizations  = options.NoOptimizations,
                NoLangModule     = options.NoLang,
                NoWarnings       = options.NoWarnings,
                NoWarningsLinker = options.NoWarningsLinker
            };

            if (options.IgnoreWarnings != null)
            {
                foreach (var i in options.IgnoreWarnings)
                {
                    if (!ret.IgnoreWarnings.Contains(i))
                    {
                        ret.IgnoreWarnings.Add(i);
                    }
                }
            }

            return(ret);
        }
Esempio n. 28
0
    public static DyObject?Eval(SourceBuffer buffer, BuilderOptions options, FileLookup lookup, object?args = null)
    {
        DyTuple?tup = null;

        if (args is not null)
        {
            var arr = args.GetType().GetProperties().Select(pi =>
                                                            new DyLabel(pi.Name, TypeConverter.ConvertFrom(pi.GetValue(args)))).ToArray();
            tup = new DyTuple(arr);
        }

        var linker = new DyLinker(lookup ?? FileLookup.Default, options ?? BuilderOptions.Default(), tup);
        var result = linker.Make(buffer);

        if (!result.Success)
        {
            throw new DyBuildException(result.Messages);
        }

        var ctx     = DyMachine.CreateExecutionContext(result.Value !);
        var result2 = DyMachine.Execute(ctx);

        return(result2.Value);
    }
Esempio n. 29
0
 public void Dispose()
 {
     if (BuilderOptions != null)
         BuilderOptions.Dispose();
 }
Esempio n. 30
0
        protected Crawler(IDocumentFactory documentFactory, IKeyValueStore<string, Result> store, IKeyValueStore<string, FetchTarget> frontier)
        {
            _store = store;
            _frontier = frontier;

            var fetcherOptions = new FetcherOptions
            {
                UserAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.62 Safari/537.36",
            };

            var parserOptions = new ParserOptions
            {
            };

            var scraperOptions = new ScraperOptions
            {
            };

            var extractorOptions = new ExtractorOptions
            {
            };

            //var storerOptions = new StorerOptions
            //{
            //};

            var builderOptions = new BuilderOptions
            {
            };

            var providerOptions = new ProviderOptions
            {
            };

            //var dispatcherOptions = new DispatcherOptions
            //{
            //};

            Fetcher = new Fetcher(fetcherOptions);
            Parser = new Parser(parserOptions, documentFactory);
            Scraper = new Scraper(scraperOptions);
            Extractor = new Extractor(extractorOptions);
            Storer = new Storer(store);
            Builder = new Builder(builderOptions);
            Provider = new Provider(providerOptions, store, frontier);
            Dispatcher = new Dispatcher();

            Fetcher.SendTo(Parser, x => x.StatusCode == System.Net.HttpStatusCode.OK);

            Parser.SendTo(Scraper);
            Parser.SendTo(Extractor);

            Fetcher.SendTo(Builder, x => x.StatusCode == System.Net.HttpStatusCode.OK);
            Scraper.SendTo(Builder);
            Extractor.SendTo(Builder);

            Builder.SendTo(Storer);

            //Storer.LinkTo(new ActionBlock<Result>(x =>
            //{
            //}));

            Builder.SendTo(Provider);
            Provider.SendTo(Dispatcher, x => x != null);
            Dispatcher.SendTo(Fetcher);
        }
        /// <summary>
        /// 通过转换器后的字段名
        /// </summary>
        /// <param name="column"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public static string GetColumnName(this BuilderOptions column, string name)
        {
            var convert = new DefaultWordsConvert(column.Mode);

            return($"{column.Prefix}{convert.Convert(name)}{column.Suffix}");
        }
Esempio n. 32
0
 public DyLinker(FileLookup lookup, BuilderOptions options) : this(lookup, options, null)
 {
 }
Esempio n. 33
0
        private static async Task <BuilderOptions> SetToolOptionsAsync(string path)
        {
            Stopwatch stopWatch = new Stopwatch();

            stopWatch.Start();
            const string tool = "TOOL OPTIONS: ";

            if (File.Exists(path))
            {
                Console.WriteLine($"{tool}File \"{path}\" found.\nSet DotNetBuildTool options from {path} ->");
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.DarkRed;
                Console.WriteLine($"{tool}Cant find \"{path}\" file.\nSorry, command line arguments not Implement yet.");
                Console.ResetColor();
                if (_errorIfToolConfigNotExists)
                {
                    throw new Exception($"{tool}Can't configure build tool.");
                }
            }
            BuilderOptions result = new BuilderOptions();

            await foreach (KeyValuePair <string, string> item in LoadToolConfig(path))
            {
                PropertyInfo?property = typeof(BuilderOptions)
                                        .GetProperties()
                                        .FirstOrDefault(x => x.Name.ToUpper() == item.Key.ToUpper());
                if (property == null)
                {
                    Console.ForegroundColor = ConsoleColor.DarkYellow;
                    Console.WriteLine($"    {tool}Can't find and set: \"{item.Key}\"  -> Done.");
                    Console.ResetColor();
                }
                else
                {
                    bool isParsed = Enum.TryParse(property.PropertyType.Name.ToUpper(), out OptionType optionType);
                    if (!isParsed)
                    {
                        optionType = property.PropertyType.IsEnum ? OptionType.ENUM : OptionType.Unknown;
                    }
                    try
                    {
                        object givenObj = optionType switch
                        {
                            OptionType.BOOLEAN => ParseBool(item.Value),
                            OptionType.STRING => item.Value,
                            OptionType.ENUM => ParseEnum(property.PropertyType, item.Value),
                            _ => throw new ArgumentException($"Unknown type: {property.PropertyType}")
                        };
                        property.SetValue(result, givenObj);
                    }
                    catch (ArgumentException ex)
                    {
                        throw new ArgumentException($"{item.Key} option can't be parsed", ex);
                    }
                    Console.WriteLine($"    {tool}{item.Key} \"{item.Value}\"  -> Done.");
                }
            }
            stopWatch.Stop();
            Console.WriteLine($"{tool}Done. Elapsed time: {((float)stopWatch.ElapsedTicks / (float)Stopwatch.Frequency).ToString("0.0000")}s.");
            return(result);

            bool ParseBool(string str)
            {
                return(str switch
                {
                    "0" => false,
                    "1" => true,
                    _ => throw new ArgumentException($"Can't parse value: {str}")
                });
            }