Как изменить хранилище записей Orchard - PullRequest
10 голосов
/ 18 января 2011

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

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

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

Спасибо!

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

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

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

Ответы [ 2 ]

16 голосов
/ 23 февраля 2011

Вам не нужно реализовывать 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 для быстрой разработки.

3 голосов
/ 19 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...