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

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

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

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

Спасибо!

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

Я лучше подробнее опишу сценарий:

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

2 ответа

Решение

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

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

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

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

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

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

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

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

Другие вопросы по тегам