0

我正在尝试使用.net core 和handlebars 构建代码生成框架,我需要自定义表达式如何映射到handlebars.net 中的值。这是可能的吗?我最接近的是将我的输入对象转换为字典,但它没有给我所需的灵活性,有没有我可以实现的接口来实现这一点?

4

2 回答 2

1

如果我的意图正确,您可以查看Handlebars.CSharp > IObjectDescriptorProvider使用示例)。

PS Handlebars.CSharp是我维护的Handlebars.Net的一个分支。

更新:

提到的功能已经合并到Handlebars.Net

于 2020-05-31T21:08:03.410 回答
0

我最终创建了一个自定义接口,可以将任何对象转换为字典。这是当前的实现,如果有人最终需要它的话。

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());
于 2020-04-04T18:49:11.590 回答