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

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

最佳答案

在"new"glass.mapper 中,您可以通过查询 Glass 上下文对象的 TypeConfigurations 属性来获取类。

像这样:

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

关于c# - 从 Glass.Mapper.Sitecore 升级到 Glass.Mapper.Sc 时缺少 InstanceContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30112751/

相关文章:

sitecore - Glass Mapper RenderLink 双引号

sitecore - 在 Sitecore 中,如何使用模态对话框中的父项目重新加载内容编辑器?

c# - 我应该在接线员的右边写什么?

c# - Mailkit 对 Imap 的身份验证失败

c# - Visual Studio 2017 : C# highlight and surround with parentheses

asp.net - 无法在 Sitecore 8.1 项目中加载文件或程序集 Microsoft.Extensions.DependencyInjection.Abstractions

sitecore - 如何从 Sitecore EXM 获取 Optin 和 Optout 信息?

youtube - Glass.Mapper.MapperException:无法创建类型-没有为此对象定义无参数构造函数

orm - Sitecore glass mapper 和其他 ORMS

c# - 在网站的 bin 文件夹中包含 csc.exe 的安全问题