10

OrchardCMSの使用を検討しているプロジェクトに取り組んでいます。

ただし、一部のコンテンツアイテムのデータソースとしてWebサービスを使用したいと考えています。これを可能にするためにリポジトリの実装を変更する必要があると思いますが、それについてはよくわかりません。

だから私の質問は:私の推測は正しいですか、それとももっと複雑ですか?そして、それはどのように行うことができますか?

ありがとう!

更新: OrchardのIRepositoryインターフェイスでは、LINQプロバイダーを実装する必要があるようです。WebサービスはSOAPを介して提供されるため、このシナリオではこれは不可能です。

シナリオについてさらに詳しく説明します。

構築したいWebサイトは、Webサービスを使用して、組織のメンバーとユニットに関する情報を取得する必要があります。たとえば、Webサイトなどの組織単位のメンバーを表示したいと思います。また、「メンバー」(WSから)とM:N関係(参加者)を持つ必要がある独自のコンテンツタイプ「イベント」を作成する必要があります。

4

2 に答える 2

16

パーツストレージを別の場所に完全に転送したくない場合に備えて、 IRepositoryを実装する必要はありません。私は現在、オーチャードベースのプロジェクトの1つでWCFサービスを使用しているので、シナリオは似ています。

あなたはこのようにそれを行うことができます:

  1. WebサービスプロキシをIDependencyを実装するクラスでラップして、ドライバー/ハンドラー/コントローラーなどに挿入できるようにします。単体テストとモックを簡単にするために、別のインターフェイスを作成する必要があります。IMyWebServiceWrapper:IDependencyを実装し、それを実装します。
  2. 適切なコンテンツパーツとレコードを作成します。レコードには、WSからデータを見つけてフェッチするために必要な情報のみが格納されます。コンテンツパーツで必要なすべてのプロパティを作成します-それらはWSからロードされます。
  3. ポイント1からクラスを適切なコンテンツハンドラーのコンストラクターに注入します
  4. コンテンツハンドラーコンストラクター内では、次のようなものを使用します。

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

  • MyPartは、オーチャード側のあなたの部分です。
  • MyPropertyは、WSからロードされるユーザー側のプロパティです。
  • myServiceは、ラップされたWSプロキシであり、コンストラクターパラメーターとして渡されます。
  • GetMyPropertyは、WSを呼び出し、必要なデータを取得するラッパーのメソッドです。

もちろん、他のハンドラーイベント(OnInitialized、OnCreated、OnPublishedなど)を使用することもできます。コンテンツハンドラーの詳細については、こちらをご覧ください。

また、迅速な開発のために、Codeplexから開発スタートアップモジュールを入手することをお勧めします。

于 2011-02-23T01:26:19.933 に答える
3

実際には、リポジトリやレコードを使用する必要はありません。実行しようとしていることによっては、ハンドラーからフェッチロジックをトリガーすることが機能する場合があります。

于 2011-01-19T00:01:04.683 に答える