10

私は​​3210の使用を検討しているプロジェクトで作業しています。オーチャード・レコード・リポジトリの変更方法

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

私の質問は:私の推測は正しいのですか、それとももっと複雑ですか?そしてそれはどうすればできますか?

ありがとう!

更新: オーチャードのIRepositoryインターフェイスでは、LINQプロバイダーを実装する必要があります。 WebサービスはSOAP経由で提供されるため、このシナリオでは不可能です。

私はより良い、さらにシナリオを説明します:我々は構築したい

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

+0

非常に同じことをやろうとしています。パートにコンテンツを提供するWS - ユーザー管理をミックスに統合することも検討しています。 – justSteve

答えて

16

あなたはどこか別の場所に完全ダイレクトパーツ保管したくない場合にはIRepositoryを実装する必要はありません。私はOrchardベースのプロジェクトの1つでWCFサービスを現在使用していますので、シナリオは似ています。

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

  1. あなたが用のドライバ/ハンドラ/コントローラなどに注入することができると思いますので、IDependencyを実装したクラスでは、Webサービスプロキシをラップ単体テストや嘲笑の容易さは、例えば、 IMyWebServiceWrapper:IDependencyそれを実装します。
  2. 適切なコンテンツのパーツとレコードを作成します。レコードストアには、WSからのデータの検索とフェッチに必要な情報が含まれています。コンテンツパートでは、必要なすべてのプロパティを作成します。これらはWSからロードされます。
  3. コンテンツハンドラのコンストラクタの使用内の適切なコンテンツハンドラコンストラクタ
  4. にポイント1からこのような何かあなたのクラスを注入:MyPartは上のあなたの部分である

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

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

他のハンドライベント(OnInitialized、OnCreated、OnPublishedなど)を使用できます。コンテンツハンドラhereについて詳しく読むことができます。

また、迅速な開発のためにCodeplexからdev startup moduleを取得することをおすすめします。

3

実際にはには、リポジトリまたはレコードを使用するのにが必要です。何をしようとしているかに応じて、ハンドラからフェッチロジックをトリガすることができます。

+0

そして、どのような正確な拡張性があなたのアドバイスを使用して指していますか?主にIContentHandlerの "BuildDisplay"メソッドと "BuildEditor"メソッドをオーバーライドしますか?それは十分か? (更新を参照) –

関連する問題