10

나는 Orchard CMS을 사용하여 프로젝트를 진행하고 있습니다.과수원 레코드 저장소를 변경하는 방법

그러나 웹 서비스를 일부 콘텐츠 항목의 데이터 소스로 사용하려고합니다. 이 작업을 가능하게하기 위해 저장소 구현을 변경해야한다고 생각하지만 확실하지 않습니다.

내 질문은 : 내 추측이 맞나요? 아니면 더 복잡한가요? 그리고 어떻게 그럴 수 있습니까?

고마워요!

업데이트 : 원의 IRepository 인터페이스는 LINQ 공급자를 필요로 내가 볼 구현한다. SOAP를 통해 웹 서비스가 제공되므로이 시나리오에서는 불가능합니다.

더 나은 더 시나리오를 설명합니다 :

우리가 구축하고자하는 웹 사이트는 조직 구성원과 단위에 대한 정보를 얻기 위해 웹 서비스를 사용할 수 있습니다. 우리는 예를 들어 웹 사이트에 일부 조직 단위의 구성원을 표시하려고합니다. 또한 M : N 관계 (참석자)와 "회원"(WS의)이 있어야하는 자체 컨텐트 유형 "이벤트"를 만들고 싶습니다.

+0

매우 똑같은 일을하려고합니다. 파트에 컨텐츠를 제공하는 WS - 사용자 관리를 믹스에 통합하고자합니다. – justSteve

답변

16

당신은 당신이 다른 곳으로 완전히 직접 부품 저장하지 않으려는 경우에 IRepository을 구현할 필요가 없습니다. 현재 Orchard 기반 프로젝트 중 하나에서 WCF 서비스를 사용하고 있으므로 시나리오가 비슷합니다.

당신은이 방법을 수행 할 수 있습니다

  1. 당신은 드라이버/핸들러/컨트롤러 등 에 주입 할 수있을 것입니다, 그래서 IDependency를 구현하는 클래스에서 웹 서비스 프록시를 감싸 단위 테스트 및 조롱의 용이성은 별도의 인터페이스를 만들어야합니다 (예 : IMyWebServiceWrapper : IDependency 그리고 구현하십시오.
  2. 적절한 콘텐츠 파트 및 레코드를 만듭니다. 레코드 저장소 에만은 WS에서 데이터를 찾아서 가져 오는 데 필요한 정보입니다. 컨텐트 파트에서 필요한 모든 속성을 만들면 WS에서로드됩니다.
  3. 가 적절한 콘텐츠 핸들러 '생성자이 같은 내용 핸들러 생성자를 사용 뭔가 내부
  4. 에 지점 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을받는 것이 좋습니다.

3

사실 저장소 또는 레코드를 사용하려면이 필요하지 않습니다. 수행하려는 작업에 따라 핸들러에서 페! 논리를 트리거하는 것이 효과적 일 수 있습니다.

+0

그리고 정확한 확장성에 어떤 조언이 필요합니까? IContentHandler에서 주로 "BuildDisplay"및 "BuildEditor"메서드를 재정의 하시겠습니까? 충분한가? (업데이트 참조) –