制作网站用c 做前台什么是seo搜索
2026/4/7 4:26:51 网站建设 项目流程
制作网站用c 做前台,什么是seo搜索,阿里云服务器官方网站,网页设计师证书什么时候考需求分析与场景定义 明确代码生成器的目标#xff1a;生成实体类、API控制器、DTO等常见场景典型应用场景#xff1a;快速开发CRUD功能、减少重复编码工作核心需求#xff1a;可配置性、模板灵活性、与项目结构无缝集成 具体实现可参考NetCoreKevin的kevin.CodeGenerator模…需求分析与场景定义明确代码生成器的目标生成实体类、API控制器、DTO等常见场景典型应用场景快速开发CRUD功能、减少重复编码工作核心需求可配置性、模板灵活性、与项目结构无缝集成具体实现可参考NetCoreKevin的kevin.CodeGenerator模块基于.NET构建的企业级SaaS智能应用架构采用前后端分离设计具备以下核心特性前端技术Vue3前端框架IDS4单点登录系统一库多租户解决方案多级缓存机制CAP事件集成SignalR实时通信领域驱动设计AI智能体框架RabbitMQ消息队列项目地址githubhttps://github.com/junkai-li/NetCoreKevinGitee: https://gitee.com/netkevin-li/NetCoreKevin第一步配置模板模板配置示例如下图所示创建kevin.CodeGenerator模块ICodeGeneratorService接口定义usingkevin.CodeGenerator.Dto;usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespacekevin.CodeGenerator{publicinterfaceICodeGeneratorService{/// summary/// 获取区域名称列表/// /summary/// returns/returnsTaskListstringGetAreaNames();/// summary/// 获取区域名称下面的表列表/// /summary/// returns/returnsTaskListEntityItemDtoGetAreaNameEntityItems(stringareaName);/// summary/// 生成代码/// /summary/// param nameentityItems/param/// returns/returnsTaskboolBulidCode(ListEntityItemDtoentityItems);}}CodeGeneratorService实现usingkevin.CodeGenerator.Dto;usingMicrosoft.CodeAnalysis;usingMicrosoft.CodeAnalysis.CSharp;usingMicrosoft.CodeAnalysis.CSharp.Syntax;usingMicrosoft.Extensions.Options;usingSystem;usingSystem.Collections.Generic;usingSystem.IO;usingSystem.Linq;usingSystem.Reflection.Metadata;usingSystem.Text;usingstaticMicrosoft.CodeAnalysis.CSharp.SyntaxTokenParser;namespacekevin.CodeGenerator{publicclassCodeGeneratorService:ICodeGeneratorService{privateCodeGeneratorSetting_config;publicCodeGeneratorService(IOptionsMonitorCodeGeneratorSettingconfig){_configconfig.CurrentValue;}publicasyncTaskListstringGetAreaNames(){return_config.CodeGeneratorItems.Select(tt.AreaName).ToList();}publicasyncTaskListEntityItemDtoGetAreaNameEntityItems(stringareaName){vararea_config.CodeGeneratorItems.FirstOrDefault(tt.AreaNameareaName);if(area!default){varentityItemsnewListEntityItemDto();varpath..\\..\\area.AreaPath.Trim().Replace(.,\\);// 遍历路径下的所有 .cs 文件if(!Directory.Exists(path)){thrownewArgumentException($CodeGeneratorSetting配置:{areaName}{area.AreaPath}不存在);}else{varcsFilesDirectory.GetFiles(path,*.cs,SearchOption.AllDirectories);foreach(varfileincsFiles){// 读取文件内容varcodeFile.ReadAllText(file);vartreeCSharpSyntaxTree.ParseText(code);varroot(CompilationUnitSyntax)tree.GetRoot();// 查找所有类声明varclassDeclarationsroot.DescendantNodes().OfTypeClassDeclarationSyntax();foreach(varclassDeclarationinclassDeclarations){// 检查类是否有 Table 特性if(classDeclaration.AttributeLists.Any(listlist.Attributes.Any(attrattr.Name.ToString()Table))){stringdescription;// 检查类是否有 Description 特性vardescriptionAttrclassDeclaration.AttributeLists.SelectMany(listlist.Attributes).FirstOrDefault(attrattr.Name.ToString()Description);if(descriptionAttr!null){// 获取特性参数值varargdescriptionAttr.ArgumentList?.Arguments.FirstOrDefault();if(arg?.ExpressionisLiteralExpressionSyntaxliteral){descriptionliteral.Token.ValueText;}}entityItems.Add(newEntityItemDto{AreaNamearea.AreaName,EntityNameclassDeclaration.Identifier.Text,Description${file}:{description}});}}}returnentityItems;}}returnnewListEntityItemDto();}publicasyncTaskboolBulidCode(ListEntityItemDtoentityItems){//获取对应的模板文件variRpTemplateGetBuildCodeTemplate(IRp);varrpTemplateGetBuildCodeTemplate(Rp);variServiceTemplateGetBuildCodeTemplate(IService);varserviceGetBuildCodeTemplate(Service);foreach(variteminentityItems){vararea_config.CodeGeneratorItems.FirstOrDefault(tt.AreaNameitem.AreaName);if(area!default){if(item.EntityName.StartsWith(T,StringComparison.OrdinalIgnoreCase)){item.EntityNameitem.EntityName.Substring(1);}WriteCode(newDictionarystring,string{{%entityName%,item.EntityName},{%namespacePath%,area.IRpBulidPath}},iRpTemplate,$../../{area.IRpBulidPath.Trim().Replace(.,\\)}/I{item.EntityName}Rp.cs);WriteCode(newDictionarystring,string{{%entityName%,item.EntityName},{%namespacePath%,area.RpBulidPath}},rpTemplate,$../../{area.RpBulidPath.Trim().Replace(.,\\)}/{item.EntityName}Rp.cs);WriteCode(newDictionarystring,string{{%entityName%,item.EntityName},{%namespacePath%,area.IServiceBulidPath}},iServiceTemplate,$../../{area.IServiceBulidPath.Trim().Replace(.,\\)}/I{item.EntityName}Service.cs);WriteCode(newDictionarystring,string{{%entityName%,item.EntityName},{%namespacePath%,area.ServiceBulidPath}},service,$../../{area.ServiceBulidPath.Trim().Replace(.,\\)}/{item.EntityName}Service.cs);}}returntrue;}/// summary/// 获取对应模板文件/// /summary/// param namename/param/// returns/returnsprivatestringGetBuildCodeTemplate(stringname){returnFile.ReadAllText(..\\..\\Kevin\\kevin.Module\\kevin.CodeGenerator\\BuildCodeTemplate\\name.txt,encoding:Encoding.UTF8);}/// summary/// 生成文件和代码/// /summary/// param nameparamters/param/// param namecontent/param/// param namesavePath/paramprivatevoidWriteCode(Dictionarystring,stringparamters,stringcontent,stringsavePath){foreach(variteminparamters){contentcontent.Replace(item.Key,item.Value);}vardirPath.GetDirectoryName(savePath);if(!Directory.Exists(dir)){Directory.CreateDirectory(dir);}if(File.Exists(savePath)){Console.WriteLine($文件{savePath}已存在跳过生成);}else{File.WriteAllText(savePath,content,Encoding.UTF8);}}}}CodeGeneratorSettingDtonamespacekevin.CodeGenerator.Dto{publicclassCodeGeneratorSetting{/// summary/// 配置文件相关信息/// /summarypublicListCodeGeneratorItemCodeGeneratorItems{get;set;}new();}publicclassCodeGeneratorItem{/// summary/// 区域/// /summarypublicstringAreaName{get;set;};/// summary/// 数据库实体类路径/// /summarypublicstringAreaPath{get;set;};/// summary/// 仓储接口生成路径/// /summarypublicstringIRpBulidPath{get;set;};/// summary/// 仓储生成路径/// /summarypublicstringRpBulidPath{get;set;};/// summary/// 服务接口生成路径/// /summarypublicstringIServiceBulidPath{get;set;};/// summary/// 服务生成路径/// /summarypublicstringServiceBulidPath{get;set;};}}配置Json文件////代码生成器配置 .转换成/时要和路径一致 请配置好命名空间和路径对应关系CodeGeneratorSetting:{CodeGeneratorItems:[{AreaName:App.WebApi.v1,//项目命名AreaPath:App.Domain.Entities,//实体类路径IRpBulidPath:App.Domain.Interfaces.Repositorie.v1,//仓储接口命名空间和路径RpBulidPath:App.RepositorieRps.Repositories.v1,//仓储命名空间和路径IServiceBulidPath:App.Domain.Interfaces.Services.v1,//服务接口命名空间和路径ServiceBulidPath:App.Application.Services.v1//服务命名空间和路径}]}服务注入services.AddKevinCodeGenerator(options{varsettingsConfiguration.GetRequiredSection(CodeGeneratorSetting).GetCodeGeneratorSetting()!;options.CodeGeneratorItemssettings.CodeGeneratorItems;});使用

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询