1
我现在用的是玻璃映射在Sitecore的实例,其中我有Sitecore的玻璃数据模型的传承
- 基地
- BaseWithList的基本数据模板结构
- BaseWithExtraContent
- BaseWithExtraContentAndCallToActionLink
我在我的项目中添加了模型类以遵循这个结构。我的课程名称与我的模板名称相符。
[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;}
}
模型从具有基本类型的列表中的其他类中使用这些数据,我希望能够以任何派生类型存储在这里,所以我加的属性在此tutorial
[SitecoreType(AutoMap = true)]
public class HomePage
{
[SitecoreChildren(InferType = true)]
[SitecoreField(FieldName = "Widgets")]
public virtual IEnumerable<Base> Widgets { get; set; }
}
详细
根据tutorial这应该工作。然而,小部件列表只包含基类型的类。
然后我找到了一个后来的tutorial,表示如果您将模型分离出来的模型与安装Glass的不同组合件,则必须添加指向模型所在装配体的AttributeConfigurationLoader。类型都在同一个程序集中,所以我不确定这会解决问题,但是我仍然尝试了。
我的定制加载的配置是这样的:
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
*/
}
}
在做自定义的加载配置我现在得到一个“不明确的匹配找到”异常。我检查过是否在该组件中的类中设置了其他非Glass属性,并且没有。
任何想法?我想这有两个问题。
- 为什么使用推断的类型属性不加载正确的类型和只有基类型?
- 为什么当我试图通过添加自定义属性加载器来解决这个问题时,我是否会得到异常?
你有堆栈跟踪吗? –
这里是玻璃自定义配置类代码: var attributes = new AttributeConfigurationLoader(“x.Data”); 返回新的IConfigurationLoader [] {attributes}; – chrishey
堆栈跟踪太长而无法完整发布: [AmbiguousMatchException:找到模糊匹配。] System.RuntimeType.GetPropertyImpl(String name,BindingFlags bindingAttr,Binder联编程序,Type returnType,Type []类型,ParameterModifier []修饰符)+13922767 System.Type.GetProperty(String name)+65 Glass.Mapper.Utilities。GetProperty(Type type,String name)+330 Glass.Mapper.Utilities.GetAllProperties(Type type)+710 Glass.Mapper.Configuration.Attributes。 d__2.MoveNext()+169 –
chrishey