完成模板模块,但配置类有问题
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Yi.Framework.Template.Abstract
|
||||
{
|
||||
public abstract class AbstractTemplateProvider : ITemplateProvider
|
||||
{
|
||||
public virtual string? BuildPath { get; set; }
|
||||
public string? TemplatePath { get; set; }
|
||||
public string? BakPath { get; set; }
|
||||
protected Dictionary<string, string> TemplateDic { get; set; } = new Dictionary<string, string>();
|
||||
|
||||
public abstract void Bak();
|
||||
|
||||
public abstract void Build();
|
||||
|
||||
|
||||
protected virtual string GetTemplateData()
|
||||
{
|
||||
if (TemplatePath is null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(TemplatePath));
|
||||
}
|
||||
return File.ReadAllText(TemplatePath);
|
||||
}
|
||||
|
||||
protected void AddTemplateDic(string oldStr, string newStr)
|
||||
{
|
||||
|
||||
TemplateDic.Add(oldStr, newStr);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Yi.Framework.Template.Abstract
|
||||
{
|
||||
public interface ITemplateProvider
|
||||
{
|
||||
/// <summary>
|
||||
/// 构建生成路径
|
||||
/// </summary>
|
||||
string? BuildPath { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 模板文件路径
|
||||
/// </summary>
|
||||
string? TemplatePath { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 备份文件路径
|
||||
/// </summary>
|
||||
string? BakPath { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 开始构建
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
void Build();
|
||||
|
||||
/// <summary>
|
||||
/// 生成备份
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
void Bak();
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Yi.Framework.Template.ConstClasses;
|
||||
|
||||
namespace Yi.Framework.Template.Abstract
|
||||
{
|
||||
public abstract class ModelTemplateProvider : ProgramTemplateProvider
|
||||
{
|
||||
|
||||
public ModelTemplateProvider(string modelName, string entityName) : base(modelName, entityName)
|
||||
{
|
||||
AddIgnoreEntityField(/*"Id", */"TenantId", "IsDeleted");
|
||||
}
|
||||
|
||||
private string entityPath=string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 实体路径,该类生成需要实体与模板两个同时构建成
|
||||
/// </summary>
|
||||
public string EntityPath
|
||||
{
|
||||
get => this.entityPath;
|
||||
set
|
||||
{
|
||||
value = value!.Replace(TemplateConst.EntityName, EntityName);
|
||||
value = value.Replace(TemplateConst.ModelName, ModelName);
|
||||
this.entityPath = value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 生成模板忽略实体字段
|
||||
/// </summary>
|
||||
private List<string> IgnoreEntityFields { get; set; } = new();
|
||||
|
||||
public override void Build()
|
||||
{
|
||||
if (BuildPath is null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(BuildPath));
|
||||
}
|
||||
//模板信息
|
||||
var templateData = GetTemplateData();
|
||||
|
||||
//实体信息
|
||||
var enetityDatas = GetEntityData().ToList();
|
||||
|
||||
//获取全部属性字段
|
||||
for (var i = enetityDatas.Count() - 1; i >= 0; i--)
|
||||
{
|
||||
//不是字段属性直接删除跳过
|
||||
if (!enetityDatas[i].Contains("{ get; set; }"))
|
||||
{
|
||||
enetityDatas.RemoveAt(i);
|
||||
continue;
|
||||
}
|
||||
//是字段属性,同时还包含忽略字段
|
||||
bool IsSkip = false;
|
||||
|
||||
foreach (var IgnoreEntityField in IgnoreEntityFields)
|
||||
{
|
||||
if (enetityDatas[i].Contains(IgnoreEntityField))
|
||||
{
|
||||
enetityDatas.RemoveAt(i);
|
||||
IsSkip=true;
|
||||
break;;
|
||||
}
|
||||
}
|
||||
|
||||
if (!IsSkip)
|
||||
{
|
||||
//以}结尾,不包含get不是属性,代表类结尾
|
||||
if (enetityDatas[i].EndsWith("}") && !enetityDatas[i].Contains("get"))
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//拼接实体字段
|
||||
var entityFieldsbuild = string.Join("\r\n", enetityDatas);
|
||||
|
||||
|
||||
//模板替换属性字段
|
||||
templateData = templateData.Replace(TemplateConst.EntityField, entityFieldsbuild);
|
||||
|
||||
templateData = base.ReplaceTemplateDic(templateData);
|
||||
|
||||
if (!Directory.Exists(Path.GetDirectoryName(BuildPath)))
|
||||
{
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(BuildPath)!);
|
||||
}
|
||||
File.WriteAllText(BuildPath, templateData);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取实体信息
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
/// <exception cref="ArgumentNullException"></exception>
|
||||
public virtual string[] GetEntityData()
|
||||
{
|
||||
if (TemplatePath is null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(entityPath));
|
||||
}
|
||||
if (!File.Exists(entityPath))
|
||||
{
|
||||
throw new FileNotFoundException($"请检查路径:{entityPath}\r\n未包含实体:{EntityName}");
|
||||
}
|
||||
|
||||
return File.ReadAllLines(entityPath);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加忽略实体字段
|
||||
/// </summary>
|
||||
/// <param name="field"></param>
|
||||
public void AddIgnoreEntityField(params string[] field)
|
||||
{
|
||||
IgnoreEntityFields.AddRange(field);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Yi.Framework.Template.ConstClasses;
|
||||
|
||||
namespace Yi.Framework.Template.Abstract
|
||||
{
|
||||
|
||||
public abstract class ProgramTemplateProvider : AbstractTemplateProvider
|
||||
{
|
||||
public ProgramTemplateProvider(string modelName, string entityName)
|
||||
{
|
||||
ModelName = modelName;
|
||||
EntityName = entityName;
|
||||
base.AddTemplateDic(TemplateConst.EntityName, EntityName);
|
||||
base.AddTemplateDic(TemplateConst.ModelName, ModelName);
|
||||
base.AddTemplateDic(TemplateConst.LowerEntityName, EntityName.Substring(0, 1).ToLower() + EntityName.Substring(1));
|
||||
base.AddTemplateDic(TemplateConst.LowerModelName, ModelName.ToLower());
|
||||
}
|
||||
/// <summary>
|
||||
/// 实体名称
|
||||
/// </summary>
|
||||
public string EntityName { get; set; }
|
||||
/// <summary>
|
||||
/// 模块名称
|
||||
/// </summary>
|
||||
public string ModelName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 重写构建路径,替换实体名称与模块名称
|
||||
/// </summary>
|
||||
public override string? BuildPath
|
||||
{
|
||||
get => base.BuildPath;
|
||||
set
|
||||
{
|
||||
value = ReplaceTemplateDic(value!);
|
||||
|
||||
base.BuildPath = value;
|
||||
}
|
||||
}
|
||||
|
||||
public string ReplaceTemplateDic(string str)
|
||||
{
|
||||
foreach (var ky in TemplateDic)
|
||||
{
|
||||
str = str.Replace(ky.Key, ky.Value);
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
|
||||
public override void Build()
|
||||
{
|
||||
if (BuildPath is null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(BuildPath));
|
||||
}
|
||||
var templateData = GetTemplateData();
|
||||
templateData = ReplaceTemplateDic(templateData);
|
||||
if (!Directory.Exists(Path.GetDirectoryName(BuildPath)))
|
||||
{
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(BuildPath)!);
|
||||
}
|
||||
File.WriteAllText(BuildPath, templateData);
|
||||
}
|
||||
|
||||
public override void Bak()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user