Sitecore Glass数据模型继承

Sitecore Glass数据模型继承,sitecore,sitecore7,glass-mapper,Sitecore,Sitecore7,Glass Mapper,我在一个Sitecore实例上使用Glass Mapper,我的基本数据模板结构是 基地 BaseWithList 基本内容外 BaseWithExtracontent和CallToActionLink 我已经在我的项目中添加了模型类来遵循这种结构。我的类名与模板名匹配 [SitecoreType(TemplateId = "{5D19BD92-799E-4DC1-9A4E-1DDE3AD68DAD}", AutoMap = true)] public class Base {

我在一个Sitecore实例上使用Glass Mapper,我的基本数据模板结构是

  • 基地
    • BaseWithList
    • 基本内容外
      • BaseWithExtracontent和CallToActionLink
我已经在我的项目中添加了模型类来遵循这种结构。我的类名与模板名匹配

[SitecoreType(TemplateId = "{5D19BD92-799E-4DC1-9A4E-1DDE3AD68DAD}", AutoMap = true)]
public class Base
{
   public virtual string Title {get;set;}
   public virtual string Content {get;set;}
}

[SitecoreType(TemplateId = "{0491E3D6-EBAA-4E21-B255-80F0607B176D}", AutoMap = true)]
public class BaseWithExtraContent : Base
{
    public virtual string ExtraContent {get;set;}
}

[SitecoreType(TemplateId = "{95563412-7A08-46A3-98CB-ABC4796D57D4}", AutoMap = true)]
public class BaseWithExtraContentAndCallToActionLink : BaseWithExtraContent
{
    public virtual string CallToActionLink {get;set;}
}
这些数据模型是从另一个具有基类型列表的类中使用的,我希望能够在这里存储任何派生类型,因此我添加了属性,如本文所述

在进行自定义加载程序配置时,我现在得到一个“发现不明确匹配”异常。我检查了该程序集中的类中是否设置了任何其他非Glass属性,但没有

有什么想法吗?我想有两个问题

  • 为什么使用推断类型属性不加载正确的类型,而只加载基类型
  • 为什么当我试图通过添加自定义属性加载器来解决这个问题时,会出现异常

  • Widgets属性有两个属性-它要么映射到项的子元素,要么映射到字段,不能两者都是。

    是否有堆栈跟踪?下面是glass自定义配置类代码:var attributes=new AttributeConfigurationLoader(“x.Data”);返回新的IConfigurationLoader[]{attributes};堆栈跟踪太长,无法完整发布:[AmbiguousMatchException:找到不明确的匹配。]System.RuntimeType.GetPropertyImpl(字符串名称,BindingFlags bindingAttr,Binder Binder,类型returnType,类型[]类型,参数修改器[]修饰符)+13922767 System.Type.GetProperty(字符串名称)+65 Glass.Mapper.Utilities.GetProperty(类型类型,字符串名称)+330 Glass.Mapper.Utilities.GetAllProperties(类型类型)+710 Glass.Mapper.Configuration.Attributes.d_u2.MoveNext()+169Glass.Mapper.Configuration.Attributes.AttributeTypeLoader.LoadType(类型)+641 Glass.Mapper.Configuration.Attributes.AttributeTypeLoader.Load()+100 Glass.Mapper.Configuration.Attributes.AttributeConfigurationLoader.LoadFromAssembly(Assembly Assembly)+391 Glass.Mapper.Configuration.Attributes.Attributes.AttributeConfigurationLoader.b_u_0(String assemblyName)+94 System.Linq.Where SelectArrayInterator
    2.MoveNext()+82 System.Linq.Enumerable.Aggregate(IEnumerable
    1 source,Func`3 Func)+123如果您有任何带有索引器的类,则可能会发生此问题。
    [SitecoreType(AutoMap = true)]
    public class HomePage
    {
        [SitecoreChildren(InferType = true)]
        [SitecoreField(FieldName = "Widgets")]
        public virtual IEnumerable<Base> Widgets { get; set; }
    }
    
    public static  class GlassMapperScCustom
    {
        public static void CastleConfig(IWindsorContainer container)
        {
            var config = new Config {UseWindsorContructor = true};
    
            container.Install(new SitecoreInstaller(config));
        }
    
        public static IConfigurationLoader[] GlassLoaders()
        {
    
            var attributes = new AttributeConfigurationLoader("Project.Data");
    
            return new IConfigurationLoader[] {attributes};
        }
        public static void PostLoad(){
            //Remove the comments to activate CodeFist
            /* CODE FIRST START
            var dbs = Sitecore.Configuration.Factory.GetDatabases();
            foreach (var db in dbs)
            {
                var provider = db.GetDataProviders().FirstOrDefault(x => x is GlassDataProvider) as GlassDataProvider;
                if (provider != null)
                {
                    using (new SecurityDisabler())
                    {
                        provider.Initialise(db);
                    }
                }
            }
             * CODE FIRST END
             */
        }
    }