Как изменить репозиторий Orchard Record
Я работаю над проектом, в котором мы рассматриваем возможность использования Orchard CMS.
Однако мы хотим использовать веб-сервисы в качестве источников данных для некоторых элементов контента. Я предполагаю, что мы должны изменить реализацию репозитория, чтобы сделать это возможным, но я не уверен в этом.
Итак, мой вопрос: верна ли моя догадка или она более сложная? И как это можно сделать тогда?
Спасибо!
Обновление: я вижу, что для интерфейса Orcheard IRepository требуется реализация поставщика LINQ. В этом сценарии это невозможно, поскольку веб-службы предлагаются через SOAP.
Я лучше подробнее опишу сценарий:
Веб-сайт, который мы хотим создать, должен использовать веб-сервисы для получения информации о членах и подразделениях организации. Мы хотели бы отобразить членов какой-либо организационной единицы, например, на веб-сайте. Мы также хотим создать наш собственный тип контента "Событие", который должен иметь отношение M:N (Участники) с "Членом" (из WS).
2 ответа
Вам не нужно реализовывать IRepository на тот случай, если вы не хотите полностью направлять хранилище деталей куда-то еще. В настоящее время я использую сервис WCF в одном из моих проектов на базе Orchard, поэтому ваш сценарий похож.
Вы можете сделать это следующим образом:
- Оберните ваш прокси-сервер веб-службы в класс, реализующий IDependency, чтобы вы могли внедрить его в драйверы / обработчики / контроллеры и т. Д. Для простоты модульного тестирования и макета вы должны создать отдельный интерфейс, например. IMyWebServiceWrapper: IDependency и затем реализовать его.
- Создать соответствующие части контента и записи. В записях хранится только информация, необходимая для поиска и выборки данных из WS. В контентных частях создайте все необходимые свойства - они будут загружены из WS.
- Вставьте ваш класс из пункта 1. в соответствующие конструкторы обработчиков содержимого
- Внутри конструктора обработчика содержимого используйте что-то вроде этого:
OnLoaded<MyPart>((ctx, part) => {
part.MyProperty = myService.GetMyProperty(part.SomeIdToLookup);
});
- MyPart - ваша роль на стороне сада.
- MyProperty - это некое свойство с вашей стороны, которое будет загружено из WS.
- myService - это ваш прокси-сервер WS, передаваемый в качестве параметра конструктора.
- GetMyProperty - это метод в оболочке, который вызывает WS и извлекает необходимые данные.
Конечно, вы можете использовать другие события-обработчики (например, OnInitialized, OnCreated, OnPublished и т. Д.). Вы можете прочитать больше об обработчиках контента здесь.
Я также рекомендовал бы получить модуль запуска dev от Codeplex для быстрой разработки.
На самом деле вам не нужно использовать репозиторий или даже запись. В зависимости от того, что вы пытаетесь сделать, срабатывание логики выборки из обработчика может сработать.