从Glass.Mapper.Sitecore升级到Glass.Mapper.Sc时缺少InstanceContext

时间:2015-05-07 22:30:28

标签: c# sitecore glass-mapper

我正在将一个项目从Glass Mapper v2(Glass.Mapper.Sitecore)升级到v4(Glass.Mapper.Sc),我遇到了一个问题,我们的解决方案是使用InstanceContext对象按模板ID获取类。我在新的Glass Mapper中找不到InstanceObject或类似的类。 这是使用它的代码片段,希望它显示我出错的地方。

protected InstanceContext InstanceContext;

public MappingService(ISitecoreContext context)
{
    InstanceContext = context.InstanceContext;
}

public T Map<T>(ISitecoreItem sourceItem) where T : class
{
    Type sourceType = InstanceContext.GetClassById(sourceItem.TemplateId);
    if (sourceType != null)
    {
        return Map(sourceItem, sourceType, typeof(T)) as T; 
    }

    return Mapper.Map<T>(sourceItem);
}

// The GetClassById is implemented in an extensions class like this:
public static Type GetClassById(this InstanceContext context, Guid templateId)
{
    if (context.ClassesById.ContainsKey(templateId))
    {
        SitecoreClassConfig config = context.ClassesById[templateId].FirstOrDefault();
        if (config != null)
        {
            return config.Type;
        }
    }
    return default(Type);
}

1 个答案:

答案 0 :(得分:2)

在&#34; new&#34; glass.mapper你可以通过查询Glass&#39;的TypeConfigurations属性来获得该类。上下文对象。

这样的事情:

var configs = Glass.Mapper.Context.Default.TypeConfigurations.Select(x => x.Value as SitecoreTypeConfiguration);
var types = configs.Where(x => x.TemplateId == templateId);