Ответ 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 для быстрой разработки.