private static async void Method11()
        {
            Console.WriteLine("请输入代码模板:");
            string       input    = Console.ReadLine();
            CodeProject  project  = null;
            CodeTemplate template = null;
            await _provider.ExecuteScopedWorkAsync(provider =>
            {
                IDataContract contract = provider.GetRequiredService <IDataContract>();
                CodeProject[] projects = contract.GetCodeProject(m => true);
                project  = projects[0];
                template = contract.CodeTemplates.FirstOrDefault(m => m.Name == input);
                return(Task.CompletedTask);
            });

            if (template == null)
            {
                Console.WriteLine($"模板 {input} 不存在");
                return;
            }
            ICodeGenerator generator = _provider.GetService <ICodeGenerator>();

            //var model = project.Modules.First().Entities.First();
            //var model = project.Modules.First();
            var      model = project;
            CodeFile file  = await generator.GenerateCode(template, model);

            File.WriteAllText(@"D:\Temp\11.txt", file.SourceCode);
            Console.WriteLine(file.SourceCode);
        }
Exemple #2
0
        public void Init()
        {
            if (Project == null)
            {
                Helper.Notify("当前项目为空,请先通过菜单“项目-项目管理”加载项目", NotificationType.Error);
                return;
            }

            CodeProject[] projects = null;
            _provider.ExecuteScopedWork(provider =>
            {
                IDataContract contract = provider.GetRequiredService <IDataContract>();
                projects = contract.GetCodeProject(m => m.Name == Project.Name);
            });
            if (projects == null)
            {
                Helper.Notify($"名称为“{Project.Name}”的项目信息不存在", NotificationType.Error);
                return;
            }

            MenuItems.Clear();
            foreach (CodeProject project in projects)
            {
                MenuItems.Add(ToMenu(project));
            }
        }
        private string[] GetEntities()
        {
            ProjectViewModel    project    = IoC.Get <MenuViewModel>().Project;
            ModuleListViewModel moduleList = IoC.Get <ModuleListViewModel>();
            List <string>       list       = new List <string>()
            {
                "OSharp.Core.EntityInfos.EntityInfo",
                "OSharp.Core.Functions.Function",
                "OSharp.Core.Systems.KeyValue"
            };

            list.AddRange(new[]
            {
                "Identity.Entities.LoginLog",
                "Identity.Entities.Organization",
                "Identity.Entities.Role",
                "Identity.Entities.RoleClaim",
                "Identity.Entities.User",
                "Identity.Entities.UserClaim",
                "Identity.Entities.UserDetail",
                "Identity.Entities.UserLogin",
                "Identity.Entities.UserRole",
                "Identity.Entities.UserToken",
                "Security.Entities.EntityRole",
                "Security.Entities.EntityUser",
                "Security.Entities.Module",
                "Security.Entities.ModuleFunction",
                "Security.Entities.ModuleRole",
                "Security.Entities.ModuleUser",
                "Systems.Entities.AuditEntity",
                "Systems.Entities.AuditOperation",
                "Systems.Entities.AuditProperty"
            }.Select(m => $"{project.NamespacePrefix}.{m}"));
            if (moduleList != null)
            {
                if (_project == null)
                {
                    IServiceProvider rootProvider = IoC.Get <IServiceProvider>();
                    MenuViewModel    menu         = rootProvider.GetRequiredService <MenuViewModel>();
                    rootProvider.ExecuteScopedWork(provider =>
                    {
                        IDataContract contract = provider.GetRequiredService <IDataContract>();
                        _project = contract.GetCodeProject(m => m.Name == menu.Project.Name).First();
                    });
                }
                list.AddRange(_project.Modules.SelectMany(m => m.Entities.Select(n => $"{project.NamespacePrefix}.{m.Name}.Entities.{n.Name}"))
                              .OrderBy(m => m));
            }

            return(list.Distinct().ToArray());
        }
        public async void Generate()
        {
            if (Project == null)
            {
                Helper.Notify("当前项目为空,无法生成代码,请先通过菜单“项目-项目管理”加载项目", NotificationType.Error);
                return;
            }
            CodeProject project = null;

            CodeTemplate[] templates = new CodeTemplate[0];
            _provider.ExecuteScopedWork(provider =>
            {
                IDataContract contract = provider.GetRequiredService <IDataContract>();
                project   = contract.GetCodeProject(m => m.Name == Project.Name).FirstOrDefault();
                templates = contract.CodeProjectTemplates.Where(m => m.ProjectId == project.Id && !m.IsLocked).Select(m => m.Template).ToArray();
            });
            if (project == null)
            {
                Helper.Notify($"名称为“{Project.Name}”的项目信息不存在", NotificationType.Error);
                return;
            }

            if (templates.Length == 0)
            {
                Helper.Notify($"项目“{project.GetName()}”的模板数量为0,请先通过菜单“项目-项目模板管理”添加模板", NotificationType.Error);
                return;
            }

            CodeFile[] codeFiles;
            var        progress = await Helper.Main.ShowProgressAsync("请稍候", "正在生成代码,请稍候");

            await Task.Run(async() =>
            {
                try
                {
                    ICodeGenerator generator = _provider.GetRequiredService <ICodeGenerator>();
                    codeFiles = await generator.GenerateCodes(templates, project);
                    await progress.CloseAsync();
                }
                catch (Exception ex)
                {
                    await progress.CloseAsync();
                    Helper.Notify($"代码生成失败:{ex.Message}", NotificationType.Error);
                    return;
                }

                SaveToFiles(codeFiles);
            });
        }