2014-10-24 4 views
1

저는 Silverlight에 익숙하지 않습니다. 원격 서비스를 제공하는 하나의 웹 프로젝트 (webApp)와 이러한 서비스를 사용하는 두 개의 클라이언트 응용 프로그램 (클라이언트 -1 및 클라이언트 -2)이있는 솔루션이 있습니다.두 Silverlight 클라이언트 응용 프로그램에서 사용자 정의 컨트롤을 다시 사용하는 방법은 무엇입니까?

나는 client-1에서 webApp에서 검색된 객체를보고 편집하는 복잡한 사용자 컨트롤을 만들었으므로이 컨트롤을 client-2에서 다시 사용하고 싶습니다.

클라이언트 응용 프로그램에서 서비스를 참조 할 때 유형이 "로컬 유형"입니다. 예를 들어, webApp에 정의 된 MyClass는 client-1 앱에서 client-1.MyClass가됩니다. client-2 앱에서 정확히 동일한 객체 (참조)를 사용하면 client-2.MyClass 유형이됩니다.

내 컨트롤을 호스팅 할 라이브러리를 만들면 웹 서비스에 대한 참조를 추가해야합니다. 세 번째 유형 인 lib.MyClass가 생깁니다. 우리 모두는 client-1.MyClass, client-2.MyClass 및 lib.MyClass가 모두 web.MyClass에서 생성 된 클래스와 정확히 같지만이 문제를 해결할 방법을 찾을 수 없다는 것을 알고 있습니다.

나는 현재 각 클라이언트 응용 프로그램에서 사용자 컨트롤의 소스 코드를 공유하고 내가 내 사용자 제어 코드 파일에서이 작업을 수행 할 수 있습니다 각 프로젝트에 정의 프리 프로세서를 가지고 찾고 있어요

:

#if CLIENT-1 
using Client-1.WebAppServiceReference 
#end if 

#if CLIENT-2 
using Client-2.WebAppServiceReference 
#end if 

그런 다음 MyClass 형식을 사용하는 메서드는 각 클라이언트 응용 프로그램에서 올바른 "local-type"을 사용하고 있습니다. 하지만 xaml에 사전 처리기 기능이 없기 때문에 문제가 발생하고 거기에 응용 프로그램의 네임 스페이스에 대한 참조가 있어야 조건부가 될 수 있습니다.

silverlight 프로젝트에서 컨트롤을 다시 사용하는 쉬운 방법이 있습니까? 각 프로젝트에이 컨트롤을위한 소스 파일의 사본 두 개를 가질 방법이 없습니다 !!

감사합니다.

답변

0

Silverlight 프로젝트/WCF 서비스 프록시에서 공유 엔터티 클래스를 사용할 수있는 몇 가지 옵션이 있습니다.

  1. RIA 클래스 라이브러리
  2. 를 사용하여 휴대용 클래스 라이브러리를 사용

위 중 하나를 사용하여를 DataContract 클래스를 만든 다음 WCF와 실버 라이트 클라이언트 프로젝트 모두에서 라이브러리를 참조하는 경우 자동 생성 된 코드는 로컬로 생성 된 클래스가 아닌 해당 공유 클래스에 대한 참조를 사용합니다. 이렇게하면 프로젝트간에 Silverlight UserControls를 다시 사용할 수 있습니다.

두 가지 방법의 차이점은 다음과 같습니다. 첫 번째 방법 (RIA 프로젝트)을 사용하는 경우 "SomeEntityClass.shared.cs"라는 파일을 만들면 ".shared"는 Visual Studio에 미러 파일 Silverlight 프로젝트에 파일 복사본을 저장하도록 지시합니다. 두 번째 방법 (PCL)은 더 새로운 접근 방법입니다.이 도구를 사용하면 여러 .NET 플랫폼 (.Net, Silverlight, Windows Phone 등)을 타겟팅 할 수있는 클래스 라이브러리를 만들고 .NET .NET 라이브러리 세트를 줄일 수 있습니다.

+0

감사합니다. @McGarnagle. 나는 당신의 제안을 들여다 보려고 노력하고 있는데, RIA 클래스 라이브러리를 추가하려고 할 때 새로운 프로젝트 템플릿에서 "WCF RIA Services Class Library"를 찾지 못했습니다. "WCF Service Library"가 나타납니다. 그들이 이름이 변경 되었다면 이것들이 같은지 알고 있습니까? VisualStudio 2013을 사용하고 있습니다. – FrankTKO

+0

@FrankTKO 그들은 동일하지 않습니다. RIA 프로젝트 템플릿은 "Silverlight"섹션 아래에 있어야합니다. – McGarnagle

+1

@McGarnagle 도와주세요. 시간을내어 주셔서 감사합니다. 왜 RIA 라이브러리를 만들 수 없는지 잘 모르겠습니다. (새 프로젝트 템플릿에서 찾을 수 없습니다). 필자는 휴대용 라이브러리를 살펴볼 것입니다. 매우 우아하지는 않지만 전 프로세서 정의 솔루션을 사용하여 여기로 이동해야했습니다. 하지만 이제는이 일이 당신 덕분에 가능하다는 것을 알았습니다! – FrankTKO

0

비즈니스 논리 등에서 XAML과 그래픽 구성 요소를 분리하는 것이 좋습니다. MVVM은 따라야 할 아주 좋은 패턴입니다.

기본 사업에 대한 Add as Link

, 당신은 할 수 있습니다 : 그 후 , 당신은 당신이 그것을 할 수있는 방법은 다음과 "를 링크로 추가"비주얼 스튜디오의 매우 유용한 기능을 두 번째 프로젝트에서 UserControl을 참조 할 수 있습니다 이 프로젝트는 두 프로젝트 모두에서 사용할 수 있으며이 두 프로젝트를이 프로젝트와 연결합니다.

희망 하시겠습니까?