10

Trabajo en un proyecto en el que estamos considerando usar Orchard CMS.Cómo cambiar el repositorio de registros de Orchard

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

Así que mi pregunta es: ¿Mi conjetura es correcta, o es más compleja? ¿Y cómo se puede hacer entonces?

Gracias!

Actualización: Veo que la interfaz de 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.

voy a describir mejor aún más el escenario:

La página web que queremos construir tiene que utilizar los servicios de Internet para obtener información acerca de un miembros de la organización y unidades. 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).

+0

Tratando de hacer casi lo mismo. WS alimentando contenido a una Parte - también busca integrar la administración de usuarios a la mezcla. – justSteve

Respuesta

16

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

Puede hacerlo de esta manera:

  1. Envuelva su proxy de servicio web en una clase que implementa IDependency, por lo que sería capaz de inyectarlo en conductores/manipuladores/controladores etc. Para la facilidad de prueba de la unidad y burla, debe crear una interfaz separada, por ej. IMyWebServiceWrapper: IDependency y luego impleméntelo.
  2. Crear contenido apropiado partes y registros. En la tienda de registros 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. inyectar su clase desde el punto 1. a constructores de contenido manipuladores adecuados
  4. Dentro del controlador de contenido utilización constructor de algo como esto:

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

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

Por supuesto, puede utilizar otros eventos de controlador (como OnInitialized, OnCreated, OnPublished, etc.). Puede leer más sobre los manejadores de contenido here.

También recomendaría obtener un dev startup module de Codeplex para un desarrollo rápido.

3

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

+0

¿Y qué punto de extensibilidad exacto aconseja usar? ¿Anula principalmente los métodos "BuildDisplay" y "BuildEditor" en IContentHandler? ¿Es suficiente? (ver actualización) –

Cuestiones relacionadas