【发布时间】:2020-07-16 16:51:00
【问题描述】:
我正在尝试使用 .net 核心和把手构建代码生成框架,我需要自定义表达式如何映射到把手.net 中的值。这是可能的吗?我最接近的是将输入对象转换为字典,但它没有给我所需的灵活性,有没有我可以实现的接口来实现这一点?
【问题讨论】:
标签: c# handlebars.js handlebars.net
我正在尝试使用 .net 核心和把手构建代码生成框架,我需要自定义表达式如何映射到把手.net 中的值。这是可能的吗?我最接近的是将输入对象转换为字典,但它没有给我所需的灵活性,有没有我可以实现的接口来实现这一点?
【问题讨论】:
标签: c# handlebars.js handlebars.net
如果我理解你的意图,你可以看看Handlebars.CSharp > IObjectDescriptorProvider (usage example)。
附: Handlebars.CSharp 是我维护的 Handlebars.Net 的一个分支。
更新:
提到的功能已经合并到Handlebars.Net
【讨论】:
我最终创建了一个自定义接口,可以将任何对象转换为字典。这是当前的实现,如果有人最终需要它的话。
public interface IHandlebarsContextConverter
{
IDictionary<string, object> Convert(object @object);
}
public class HandlebarsContextConverterFields : IHandlebarsContextConverter
{
public IDictionary<string, object> Convert(object @object)
{
return @object.GetType()
.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
.ToDictionary(x => x.Name, x => x.GetValue(@object));
}
}
public class HandlebarsContextConverterProperties : IHandlebarsContextConverter
{
public IDictionary<string, object> Convert(object @object)
{
return @object.GetType()
.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
.ToDictionary(x => x.Name, x => x.GetValue(@object, null));
}
}
var converter = new HandlebarsContextConverterMerge(
new HandlebarsContextConverterFields(),
new HandlebarsContextConverterProperties());
【讨论】: