Cómo cambiar el repository de registros de Orchard

Trabajo en un proyecto donde estamos considerando usar Orchard CMS .

Sin embargo, queremos utilizar los servicios web como fonts de datos para algunos de los elementos de contenido. Supongo que tenemos que cambiar la implementación del repository para que esto sea posible, pero no estoy seguro de eso.

Entonces mi pregunta es: ¿es correcto mi suposición o es más complejo? ¿Y cómo se puede hacer entonces?

¡Gracias!

Actualización: veo que la interfaz IRepository de Orchard requiere que se implemente el proveedor de LINQ. Eso es imposible en este escenario, ya que los servicios web se ofrecen a través de SOAP.

Describiré mejor el escenario:

El sitio web que deseamos crear tiene que usar servicios web para obtener información sobre los miembros y las unidades de una organización. Nos gustaría mostrar miembros de alguna unidad organizativa, por ejemplo, en el sitio web. También queremos crear nuestro propio tipo de contenido “Evento” que debe tener una relación M: N (Asistentes) con “Miembro” (de WS).

No tiene que implementar un IRepository en caso de que no desee dirigir completamente el almacenamiento de la parte a otro lugar. Actualmente estoy usando el servicio WCF en uno de mis proyectos basados ​​en Orchard, por lo que su escenario es similar.

Puedes hacerlo de esta manera:

  1. Envuelva su proxy del servicio web en una clase que implemente IDependency , de modo que pueda insertarlo en controladores / controladores / controladores, etc. Para facilitar la prueba unitaria de las unidades y burlarse, debe crear una interfaz separada, por ej. IMyWebServiceWrapper: IDependency y luego impleméntelo .
  2. Crea partes de contenido y registros apropiados. En los registros, almacene solo la información necesaria para localizar y recuperar datos de WS. En el contenido, las partes crean todas las propiedades necesarias: se cargarán desde la WS.
  3. Inyecte su clase desde el punto 1. en los constructores de controladores de contenido apropiados
  4. Dentro del constructor del manejador de contenido use algo como esto:

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

  • MyPart es tu parte del lado de Orchard.
  • MyProperty es una propiedad de su parte que se cargará desde WS.
  • myService es tu proxy WS empaquetado, pasado como un parámetro de constructor.
  • GetMyProperty es un método en el contenedor que llama a WS y recupera los datos necesarios.

Por supuesto, puede utilizar otros eventos de controlador (como Inicializado, Activado, En publicado, etc.). Puede leer más sobre los controladores de contenido aquí .

También recomendaría obtener un módulo de inicio de desarrollo de Codeplex para un desarrollo rápido.

En realidad, no necesita usar un repository o incluso un registro. Dependiendo de lo que intente hacer, desencadenar la lógica de obtención de un controlador podría funcionar.