但是,我们希望使用Web服务作为某些内容项的数据源.我想我们必须更改存储库实现,以使其成为可能,但我不确定.
所以我的问题是:我的猜测是正确的还是更复杂?那么怎么办呢?
谢谢!
更新:
我看到Orchard的IRepository接口需要LINQ提供程序来实现.在这种情况下,这是不可能的,因为Web服务是通过SOAP提供的.
我会更好地进一步描述场景:
我们希望建立的网站必须使用Web服务来获取有关组织成员和单位的信息.我们想在网站上显示一些组织单位的成员,例如.我们还想创建自己的内容类型“事件”,应该具有与成员(来自WS)的M:N关系(参加者).
解决方法
你可以这样做:
>将Web服务代理包装在一个实现IDependency的类中,所以你可以将其注入到驱动程序/处理程序/控制器等中.为了方便单元测试和嘲笑,您应该创建一个单独的界面,例如. IMyWebServiceWrapper:依赖并实现它.
>创建适当的内容零件和记录.在记录中只存储从WS定位和获取数据所需的信息.在内容部分创建所有必需的属性 – 它们将从WS加载.
将你的班级从1点注入适当的内容处理程序的构造函数
>在内容处理程序构造函数中使用这样的东西:
OnLoaded< MyPart>((ctx,part)=> {
part.MyProperty = myService.GetMyProperty(part.SomeIdToLookup);
});
> MyPart是您在乌节方面的一部分.
> MyProperty是您的部分属性,将从WS加载.
> myService是您包装的WS代理,作为构造函数参数传递.
> GetMyProperty是一个在包装器中调用WS并检索必要数据的方法.
当然,您可以使用其他处理程序事件(如OnInitialized,OnCreated,OnPublished等).您可以阅读有关内容处理程序here的更多信息.
我也建议从Codeplex获得一个dev startup module快速开发.