После обновления до Glass.Mapper.Sc 3.2.3.50 я получаю:
Не удалось найти сопоставитель данных для обработки свойства AbstractPropertyConfiguration Свойство: Regions Тип: [type].IEventSearch Assembly: [assembly], Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
В строке 23:
Line 21: //create a context
Line 22: Context context = Context.Create(resolver);
Line 23: context.Load(new IConfigurationLoader[]
Line 24: {
Line 25: new EventSearchMap().Load(),
Весь метод:
public void Process(PipelineArgs args)
{
//create the resolver
DependencyResolver resolver = DependencyResolver.CreateStandardResolver();
//install the custom services
var config = new Config();
resolver.Container.Install(new SitecoreInstaller(config));
//create a context
Context context = Context.Create(resolver);
context.Load(new IConfigurationLoader[]
{
new EventSearchMap().Load(),
new RegionMap().Load(),
new MunicipalityMap().Load(),
new SearchMap().Load(),
new PageMap().Load(),
new HeaderMap().Load(),
new SectionMenuMap().Load(),
new BreadcrumbMap().Load(),
new NavigationMap().Load(),
new SitemapMap().Load()
});
}
Запустилось здесь:
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<pipelines>
<initialize>
<processor type="[Type].GlassMapper, [assembly]" />
</initialize>
</pipelines>
</sitecore>
</configuration>
Интерфейс для: IEventSearch
[SitecoreType]
public interface IEventSearch : ISitecoreItem
{
IEnumerable<IRegion> Regions { get; set; }
IEnumerable<IMunicipality> Municipalities { get; set; }
}
Класс EventSearchMap:
public class EventSearchMap
{
public SitecoreFluentConfigurationLoader Load()
{
var loader = new SitecoreFluentConfigurationLoader();
SitecoreType<IEventSearch> type = loader.Add<IEventSearch>().AutoMap();
type.Delegate(x => x.Regions).GetValue(GetRegions);
type.Delegate(x => x.Municipalities).GetValue(GetMunicipalities);
return loader;
}
private IEnumerable<IMunicipality> GetMunicipalities(SitecoreDataMappingContext arg)
{
var municipalities = new List<IMunicipality>();
foreach (IRegion region in GetRegions(arg))
{
region.Municipalities.ForEach(municipalities.Add);
}
return municipalities.OrderBy(x => x.Title, StringComparer.CurrentCultureIgnoreCase);
}
private IEnumerable<IRegion> GetRegions(SitecoreDataMappingContext arg)
{
var context = new Context();
return from region in context.EventSearchPage.Children
select arg.Service.Cast<IRegion>(region);
}
}