Предоставить пользовательское связующее значение в Handlebars.NET - PullRequest
0 голосов
/ 04 апреля 2020

Я пытаюсь построить среду генерации кода, используя. net ядро ​​и рули, и мне нужно настроить отображение выражений на значения в рулях. net. Это то, что возможно? Самое близкое, к чему я был, - это преобразовать мой входной объект в словарь, но он не дает мне необходимой гибкости, есть ли какие-либо интерфейсы, которые я могу реализовать для достижения этого?

1 Ответ

0 голосов
/ 04 апреля 2020

Я закончил тем, что создал пользовательский интерфейс для преобразования любого объекта в словарь. Вот текущие реализации, если кому-нибудь когда-нибудь понадобится это.

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());
...