Мы используем Glass Mapper с Sitecore, с нашими моделями мы можем получить значения полей sitecore. Но я хочу легко получить поля sitecore (тип поля sitecore), используя модель без жесткого кодирования каких-либо строк (при использовании GetProperty()
вам нужна строка имени свойства) в методе.
Поэтому я написал эту вещь, чтобы добиться этого, однако я не доволен тем, что при ее использовании необходимо передать 2 типа, поскольку это выглядит ужасно, когда у вас длинный идентификатор модели.
public static string SitecoreFieldName<T, TU>(Expression<Func<TU>> expr)
{
var body = ((MemberExpression)expr.Body);
var attribute = (typeof(T).GetProperty(body.Member.Name).GetCustomAttributes(typeof(SitecoreFieldAttribute), false)[0]) as SitecoreFieldAttribute;
return attribute.FieldName;
}
Самый идеальный способ - получить вот так Model.SomeProperty.SitecoreField()
. Однако я не могу понять, как сделать рефекцию оттуда. Потому что это может быть расширением для любого типа.
Спасибо!