其他分享
首页 > 其他分享> > 我如何从由glassmapper映射的对象属性中获取sitecore字段?

我如何从由glassmapper映射的对象属性中获取sitecore字段?

作者:互联网

我们将Glass Mapper与Sitecore一起使用,通过我们的模型,我们可以获得Sitecore字段的值.但是我想通过使用模型轻松地获得sitecore字段(sitecore字段类型),而无需将任何字符串硬编码(当使用GetProperty()时,您需要属性名称string)到方法中.

所以我写了这个东西来实现这一目标,但是我对使用它时需要传入两种类型感到不满意,因为当您拥有一个长模型标识符时,它看起来很糟糕.

   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()这样获得它.但是我无法弄清楚如何从那里进行检测.因为那可以是任何类型的扩展.

谢谢!

解决方法:

public static string SitecoreFieldName<TModel>(Expression<Func<TModel, object>> field)
{
    var body = field.Body as MemberExpression;

    if (body == null)
    {
        return null;
    }

    var attribute = typeof(TModel).GetProperty(body.Member.Name)
        .GetCustomAttributes(typeof(SitecoreFieldAttribute), true)
        .FirstOrDefault() as SitecoreFieldAttribute;

    return attribute != null
        ? attribute.FieldName
        : null;
}

请注意,我在GetCustomAttributes方法调用中放置了initialize = true.
否则,继承的属性将被忽略.

标签:glass-mapper,sitecore,c
来源: https://codeday.me/bug/20191029/1958098.html