如何更改Orchard记录库

Voj*_*Vít 10 .net asp.net asp.net-mvc content-management-system orchardcms

我正在考虑使用Orchard CMS的项目.

但是,我们希望将Web服务用作某些内容项的数据源.我想我们必须更改存储库实现才能使这成为可能,但我不确定.

所以我的问题是:我的猜测是正确的,还是更复杂?那怎么办呢?

谢谢!

更新: 我看到Orchard的IRepository接口需要实现LINQ提供程序.在这种情况下,这是不可能的,因为Web服务是通过SOAP提供的.

我将更好地进一步描述该场景:

我们希望建立的网站必须使用Web服务来获取有关组织成员和单位的信息.我们希望在网站上显示某些组织单位的成员.我们还想创建我们自己的内容类型"Event",它应该与"Member"(来自WS)具有M:N关系(Attendees).

Pio*_*myd 16

如果您不想将零件存储完全定向到其他位置,则不必实现IRepository.我目前正在我的一个基于Orchard的项目中使用WCF服务,因此您的方案类似.

你可以这样做:

  1. 将Web服务代理包装在实现IDependency的类中,这样您就可以将其注入驱动程序/处理程序/控制器等.为了便于单元测试和模拟,您应该创建一个单独的界面,例如.IMyWebServiceWrapper:IDependency然后实现它.
  2. 创建适当的内容部分和记录.在记录中存储从WS查找和获取数据所需的信息.在内容部分中创建所有必需的属性 - 它们将从WS加载.
  3. 从第1点将类注入适当的内容处理程序的构造函数
  4. 在内容处理程序构造函数中使用如下内容:

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

  • MyPart是您在Orchard方面的一部分.
  • MyProperty是您的一些属性,将从WS加载.
  • myService是包装的WS代理,作为构造函数参数传递.
  • GetMyProperty是包装器中的一个方法,它调用WS并检索必要的数据.

当然,您可以使用其他处理程序事件(如OnInitialized,OnCreated,OnPublished等).你可以阅读更多有关内容处理器在这里.

我还建议从Codeplex 获取一个dev启动模块以便快速开发.