Kyl*_*yle 3 sitecore glass-mapper
我在一个项目上有一个多列表字段,其中可以包含来自不同模板的项目。我想知道是否有任何方式可以映射此字段,从而使对象根据其模板映射到正确的模型。因此,例如:
public interface IPerson
{
string FullName {get; set;}
}
[SitecoreType(TemplateId="....")]
public class Professor
{
[SitecoreField]
public string Prefix {get; set;}
[SitecoreField]
public string FirstName {get; set;}
[SitecoreField]
public string LastName {get; set;}
public string FullName
{
return string.format("{0} {1} {2}", Prefix, FirstName, LastName)
}
}
[SitecoreType(TemplateId="....")]
public class Student
{
[SitecoreField]
public string FirstName {get; set;}
[SitecoreField]
public string LastName {get; set;}
public string FullName
{
return string.format("{0} {1}", FirstName, LastName)
}
}
[SitecoreType(TemplateId="....")]
public class ClassSession
{
[SitecoreField]
public IEnumerable<IPerson> Participants {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我希望该Participants属性包含Student和Professor对象,因为它们实现该Fullname属性的方式有所不同。
您可以在Glass.mapper中使用推断类型,推断类型允许您基于要加载的项目的模板来加载更具体的类型。:
public interface IPerson
{
string FullName {get; set;}
}
[SitecoreType(TemplateId="....", AutoMap = true)]
public class Professor : IPerson
{
[SitecoreField]
public string Prefix {get; set;}
[SitecoreField]
public string FirstName {get; set;}
[SitecoreField]
public string LastName {get; set;}
public string FullName
{
return string.format("{0} {1} {2}", Prefix, FirstName, LastName)
}
}
[SitecoreType(TemplateId="....", AutoMap = true)]
public class Student : IPerson
{
[SitecoreField]
public string FirstName {get; set;}
[SitecoreField]
public string LastName {get; set;}
public string FullName
{
return string.format("{0} {1}", FirstName, LastName)
}
}
[SitecoreType(TemplateId="....", AutoMap = true)]
public class ClassSession
{
[SitecoreField(Setting = SitecoreFieldSettings.InferType)]
public IEnumerable<IPerson> Participants {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
注意,我AutoMap = true在类中添加了属性,并将您的multilist属性属性更改为:
[SitecoreField(Setting = SitecoreFieldSettings.InferType)]
有关更多详细信息,请转到此处的麦克教程:http : //glass.lu/docs/tutorial/sitecore/tutorial17/tutorial17.html
编辑:
您需要将程序集包括在配置加载器中,在解决方案中找到GlassMapperScCustom类。然后,您应该更新GlassLoaders方法:
public static IConfigurationLoader[] GlassLoaders()
{
var attributes = new AttributeConfigurationLoader("Your assembly name");
return new IConfigurationLoader[] {attributes };
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1603 次 |
| 最近记录: |