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); }
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); }); }