【问题标题】:How to change Orchard record repository如何更改果园记录库
【发布时间】:2011-06-11 07:13:27
【问题描述】:

我在一个项目中工作,我们正在考虑使用Orchard CMS

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

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

谢谢!

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

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

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

【问题讨论】:

  • 尝试做同样的事情。 WS 向部件提供内容 - 还希望将用户管理集成到组合中。

标签: .net asp.net asp.net-mvc content-management-system orchardcms


【解决方案1】:

如果您不想完全将零件存储定向到其他位置,则不必实施 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 等)。您可以阅读有关内容处理程序的更多信息here

我还建议从 Codeplex 获取 dev startup module 以进行快速开发。

【讨论】:

    【解决方案2】:

    实际上,您需要使用存储库甚至记录。根据您尝试执行的操作,从处理程序触发获取逻辑可能会起作用。

    【讨论】:

    • 您建议使用什么确切的扩展点?主要覆盖 IContentHandler 中的“BuildDisplay”和“BuildEditor”方法?够了吗? (见更新)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    • 2013-10-26
    • 2015-08-14
    • 1970-01-01
    相关资源
    最近更新 更多