升级Sitecore&amp; Glass mapper ISitecoreContext.GetCurrentItem <t>()返回null </t>

时间:2014-04-02 16:49:44

标签: c# asp.net-mvc sitecore glass-mapper

我们正在升级到Sitecore的最新版本,同时升级到nuget上可用的最新版本的glass mapper。

我们的代码在我们开始玻璃映射器升级之前已经开始失败,因为我们的自定义类型没有被玻璃映射器正确充气。

同样重要的是要注意,我们没有使用Windsor作为DI容器,我们选择了最新版本的Autofac,随后必须配置glass mapper才能使用我们的容器。

            var page = _context.GetCurrentItem<CarouselPage>();

此方法调用一旦返回完全膨胀的对象,但现在它只返回由glass mapper创建的新实例。使用null属性或具有null属性的动态类型。

    [SitecoreType(TemplateId = "0539B72D-FAAC-49DE-8A42-C60D7FF180DD")]
public class CarouselPage : ICarousel
{
    [SitecoreField()]
    [SitecoreEditable]
    public virtual IEnumerable<CarouselItem> Carousel { get; set; }

    [SitecoreField(FieldName = "Overlay Style")]
    public virtual bool OverlayStyle { get; set; }

    [SitecoreField(FieldName = "Carousel Pagination Alignment", FieldType = SitecoreFieldType.Droplink)]
    public KeyValue CarouselDotAlignment { get; set; }

    [SitecoreField(FieldName = "Equalize Desktop", FieldType = SitecoreFieldType.Droplink)]
    public KeyValue EqualizeDesktopText { get; set; }
}

    public interface ICarousel
{
    IEnumerable<CarouselItem> Carousel { get; set; } 
}

属性Carousel为NULL,但CarouselDotAlignmentEqualizeDesktopTextKeyValue类型的新动态实例,其属性等于NULL。

如果我绕过玻璃映射器并拨打电话 Sitecore.Context.Database.GetItem({id})我实际上得到了一个看似正确的字段的项目。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

听起来可能没有正确配置属性,我会使用以下代码检查Glass.Mapper认为配置的内容:

        var result = Glass.Mapper.Context.Default.TypeConfigurations[typeof(MyModel)];
        var properties = result.Properties.Count();

结果对象将允许您探索Glass认为应该发生的事情。

答案 1 :(得分:0)

这与此问题有关#132 将Nuget包更新到v4.0.1.5应该可以解决这个问题。