using NCC.Dependency; using System.Text; using System.Threading.Tasks; namespace NCC.ViewEngine { /// /// 视图引擎模板模型实现类 /// [SuppressSniffer] public abstract class ViewEngineModel : IViewEngineModel { /// /// 字符串构建器 /// private readonly StringBuilder stringBuilder = new(); /// /// 特性前缀 /// private string attributeSuffix = null; /// /// 模型 /// public dynamic Model { get; set; } /// /// 写入字面量 /// /// public void WriteLiteral(string literal = null) { WriteLiteralAsync(literal).GetAwaiter().GetResult(); } /// /// 写入字面量 /// /// /// public virtual Task WriteLiteralAsync(string literal = null) { stringBuilder.Append(literal); return Task.CompletedTask; } /// /// 写入对象 /// /// public void Write(object obj = null) { WriteAsync(obj).GetAwaiter().GetResult(); } /// /// 写入对象 /// /// /// public virtual Task WriteAsync(object obj = null) { stringBuilder.Append(obj); return Task.CompletedTask; } /// /// 写入特性 /// /// /// /// /// /// /// public void BeginWriteAttribute(string name, string prefix, int prefixOffset, string suffix, int suffixOffset, int attributeValuesCount) { BeginWriteAttributeAsync(name, prefix, prefixOffset, suffix, suffixOffset, attributeValuesCount).GetAwaiter().GetResult(); } /// /// 写入特性 /// /// /// /// /// /// /// /// public virtual Task BeginWriteAttributeAsync(string name, string prefix, int prefixOffset, string suffix, int suffixOffset, int attributeValuesCount) { attributeSuffix = suffix; stringBuilder.Append(prefix); return Task.CompletedTask; } /// /// 写入特性值 /// /// /// /// /// /// /// public void WriteAttributeValue(string prefix, int prefixOffset, object value, int valueOffset, int valueLength, bool isLiteral) { WriteAttributeValueAsync(prefix, prefixOffset, value, valueOffset, valueLength, isLiteral).GetAwaiter().GetResult(); } /// /// 写入特性值 /// /// /// /// /// /// /// /// public virtual Task WriteAttributeValueAsync(string prefix, int prefixOffset, object value, int valueOffset, int valueLength, bool isLiteral) { stringBuilder.Append(prefix); stringBuilder.Append(value); return Task.CompletedTask; } /// /// 结束写入特性 /// public void EndWriteAttribute() { EndWriteAttributeAsync().GetAwaiter().GetResult(); } /// /// 结束写入特性 /// /// public virtual Task EndWriteAttributeAsync() { stringBuilder.Append(attributeSuffix); attributeSuffix = null; return Task.CompletedTask; } /// /// 执行 /// public void Execute() { ExecuteAsync().GetAwaiter().GetResult(); } /// /// 执行 /// /// public virtual Task ExecuteAsync() { return Task.CompletedTask; } /// /// 获取结果 /// /// public virtual string Result() { return ResultAsync().GetAwaiter().GetResult(); } /// /// 获取结果 /// /// public virtual Task ResultAsync() { return Task.FromResult(stringBuilder.ToString()); } } /// /// 视图引擎模板模型实现类 /// /// [SuppressSniffer] public abstract class ViewEngineModel : ViewEngineModel { /// /// 强类型 /// public new T Model { get; set; } } }