コード例 #1
0
        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);
            });
        }