/// <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);
        }
Beispiel #2
0
        /// <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();
        }