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