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

Missing InstanceContext when upgrading from Glass.Mapper.Sitecore to Glass.Mapper.Sc

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

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);
}

在"new"glass.mapper中可以通过查询Glass上下文对象的TypeConfigurations属性得到class

像这样:

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