Может ли Glass Mapper Sc создать экземпляр интерфейса сопоставления?

Я использую концепцию сопоставления интерфейсов в своем проекте, потому что мои элементы Sitecore используют/наследуют несколько базовых шаблонов. Это работает хорошо, но иногда мне нужно создать объект, который реализует мой интерфейс шаблона (т.е. я хочу добавить элемент в Sitecore), чтобы сделать это, я вынужден создать класс, который реализует желаемый интерфейс, а затем создать объект. Нужно ли мне это делать? Есть ли в Glass.Mapper.Sc что-то, что возвращает прокси-объект, который я могу использовать?


person Łukasz Adamus    schedule 11.09.2015    source источник
comment
Я не уверен, что понимаю это... почему проблематично создать класс, реализующий интерфейс? Может быть, это поможет, если вы покажете какой-то код того, что вы хотели бы сделать.   -  person RvanDalen    schedule 11.09.2015
comment
@RvanDalen Создать класс, реализующий мой интерфейс, не проблема. Мне интересно, нужно ли мне это делать, потому что Glass создает прокси-объект внутри, я спросил: могу ли я получить прокси-объект из стекла, чтобы мне не нужно было создавать классы.   -  person Łukasz Adamus    schedule 11.09.2015
comment
lukasz, вы имеете в виду создание динамически, когда вы создаете объект? Я думаю, что вы имеете в виду объектно-реляционный сопоставитель, взгляните на GlassMapper :) glass.lu   -  person Charlie Afford    schedule 11.09.2015


Ответы (1)


Поэтому я попытался представить возможный сценарий, в котором вы использовали бы Castle ProxyGenerator для создания объекта на основе одного или нескольких интерфейсов. Но я подозреваю, что вы столкнетесь с проблемами, потому что SitecoreService Glass будет ожидать, что TypeConfiguration будет работать, чего у вас не будет, если вы создадите прокси.

Однако создание нового элемента с использованием интерфейса должно быть возможно следующим образом:

var service = new SitecoreService("master");
var newItem = service.Create<IArticle, ISitecoreItem>(parentItem, "New item name");
//populate the properties
newItem.Introduction = "In the beginning there was a...";
service.Save(newItem);

ISitecoreItem — это тип родителя, для этого вы можете использовать общий интерфейс. IArticle — это тип нового элемента.

Я не проверял это, но, глядя на исходный код Glass, я не понимаю, почему это не должно работать.

person RvanDalen    schedule 11.09.2015
comment
Спасибо. Работай как шарм! - person Łukasz Adamus; 15.09.2015