Как изменить репозиторий записей Orchard

Я работаю над проектом, в котором мы планируем использовать Orchard CMS.

Однако мы хотим использовать веб-службы в качестве источников данных для некоторых элементов контента. Я думаю, нам нужно изменить реализацию репозитория, чтобы сделать это возможным, но я не уверен в этом.

Итак, мой вопрос: правильно ли я догадываюсь, или это сложнее? И как это можно сделать?

Спасибо!

Update: Я вижу, что интерфейс Orchard IRepository требует, чтобы поставщик LINQ был реализован. Это невозможно в этом сценарии, поскольку веб-службы предлагаются через SOAP.

Я лучше расскажу о сценарии:

Веб-сайт, который мы хотим построить, должен использовать веб-службы для получения информации о членах и подразделениях организации. Мы хотели бы отобразить членов какой-либо организационной единицы, например, на веб-сайте. Мы также хотим создать собственный тип контента "Событие", в котором должны быть отношения M: N (участники) с "Member" (из WS).

Ответ 1

Вам не нужно внедрять IRepository, если вы не хотите полностью перенаправлять хранилище деталей в другое место. В настоящее время я использую службу WCF в одном из моих проектов на основе Orchard, поэтому ваш сценарий похож.

Вы можете сделать это следующим образом:

  • Оберните прокси-сервер веб-службы в классе, реализующем IDependency, чтобы вы могли вставлять его в драйверы/обработчики/контроллеры и т.д. Для удобства модульного тестирования и насмешек вы должны создать отдельный интерфейс, например. IMyWebServiceWrapper: IDependency и реализуйте его.
  • Создание соответствующих частей и записей контента. В записях хранится только информация, необходимая для поиска и получения данных из WS. В частях содержимого создаются все необходимые свойства - они будут загружены из WS.
  • Внесите свой класс из пункта 1. в конструкторы обработчиков соответствующих материалов
  • Внутри конструктора обработчика содержимого используйте что-то вроде этого:

OnLoaded<MyPart>((ctx, part) => { part.MyProperty = myService.GetMyProperty(part.SomeIdToLookup); });

  • MyPart - ваша роль на стороне Orchard.
  • MyProperty - это какое-то свойство с вашей стороны, которое будет загружено из WS.
  • myService - ваш завершенный WS-прокси, переданный как параметр конструктора.
  • GetMyProperty - это метод в оболочке, который вызывает WS и извлекает необходимые данные.

Конечно, вы можете использовать другие события обработчика (например, OnInitialized, OnCreated, OnPublished и т.д.). Подробнее о обработчиках содержимого вы можете прочитать здесь.

Я также рекомендовал бы получить модуль запуска dev из Codeplex для быстрой разработки.

Ответ 2

На самом деле вам не нужно использовать репозиторий или даже запись. В зависимости от того, что вы пытаетесь сделать, срабатывание логики выборки из обработчика может работать.