/// <summary> /// 根据应用服务生成脚本,并写入到文件 /// </summary> protected virtual void GenerateServiceScript(IApplicationService service) { // 如果已生成过则跳过 if (GeneratedApplicationServices.Contains(service)) { return; } var generator = ZKWeb.Application.Ioc.Resolve <ServiceScriptGenerator>(); var pathConfig = ZKWeb.Application.Ioc.Resolve <ScriptPathConfig>(); // 生成此应用服务的脚本 var script = generator.GenerateScript(service); var filename = pathConfig.NormalizeFilename( pathConfig.NormalizeClassName(service.GetType())) + ".ts"; var path = PathUtils.SecureCombine( pathConfig.GenerateModuleDirectory, pathConfig.ServicesDirectoryName, filename); PathUtils.EnsureParentDirectory(path); if (!File.Exists(path) || File.ReadAllText(path) != script) { File.WriteAllText(path, script); } // 添加到已生成的集合 GeneratedApplicationServices.Add(service); }
/// <summary> /// 生成所有脚本 /// </summary> public virtual void GenerateAll() { // 清空上次生成的集合 GeneratedDtoTypes.Clear(); GeneratedApplicationServices.Clear(); GeneratedTranslationLanguages.Clear(); // 生成应用服务的脚本 var applicationServices = ZKWeb.Application.Ioc.ResolveMany <ApplicationServiceBase>(); foreach (var applicationService in applicationServices) { // 生成数据传输对象的脚本 foreach (var method in applicationService.GetApiMethods()) { // 生成返回类型 GenerateDtoScript(method.ReturnType); // 生成参数类型 foreach (var parameter in method.Parameters) { GenerateDtoScript(parameter.Type); } } // 生成应用服务的脚本 GenerateServiceScript(applicationService); } // 生成翻译的脚本 var languages = ZKWeb.Application.Ioc.ResolveMany <ILanguage>(); foreach (var language in languages) { GenerateTranslationScript(language.Name); } // 生成翻译的索引脚本 GenerateTranslationIndexScript(); // 生成用户类型和权限列表的脚本 GeneratePrivilegesScript(); // 生成模块的脚本 GenerateModuleScript(); }