다음을 통해 공유


어댑터 매핑

업데이트: 2007년 11월

어댑터는 페이지를 요청하는 특정 장치에 맞는 특성 집합을 정의합니다. Palm Pilot에 기반한 새 장치를 디자인하는 경우 하드웨어를 수정하고 기능을 향상시킬 수 있습니다. 새 장치에 사용할 ASP.NET 모바일 웹 페이지를 개발하려면 향상된 하드웨어 기능을 충분히 활용할 수 있도록 사용자 지정 장치 어댑터가 필요합니다.

Web.config 파일에서 각 모바일 컨트롤을 해당 사용자 지정 어댑터에 매핑해야 합니다. 특정 장치에 맞게 사용자 지정하기 위해 개별 장치 어댑터 집합을 지정할 수 있을 뿐만 아니라 장치 어댑터 집합을 다른 장치 어댑터 집합에서 상속하여 추가로 사용자 지정할 수도 있습니다. 이렇게 하면 특정 장치/컨트롤 조합의 동작을 사용자 지정할 수 있습니다.

Web.config 파일의 내용

모바일 컨트롤과 장치 어댑터를 매핑하려면 <system.web> 요소의 <mobileControls> 섹션에서 해당 모바일 컨트롤을 선언적으로 구성해야 합니다. 지정된 응용 프로그램에 대한 변경 내용을 격리시키기 위해 이 작업은 Web.config 파일에서 수행할 수 있습니다. 서버측 설정은 Microsoft Windows 디렉터리 아래에 .NET Framework 설치용 Machine.config 파일에 들어 있습니다. 구성 파일에서는 런타임에 선택되는 개별 어댑터 집합을 지정할 수 있습니다.

참고:

Web.config 파일에 <mobileControls> 섹션이 현재 없으면 임의의 위치에서 <system.web> 요소의 자식으로 이 섹션을 추가할 수 있습니다.

어댑터 집합 선언

장치 어댑터 집합은 Web.config 파일 내의 매핑 메커니즘이며 사용자 지정된 장치 어댑터를 사용하는 각 컨트롤에 대해 다음과 같은 정보를 장치 어댑터 집합 내에 포함해야 합니다.

  • 클래스 조건자

  • 메서드 조건자

  • 페이지 어댑터

  • 컨트롤의 이름 및 관련 장치 어댑터

응용 프로그램의 Web.config 파일에 장치 어댑터 집합을 추가하려면 다음 코드 예제와 같이 Web.config 파일의 <mobileControls> 섹션에서 <device> 요소를 사용하여 장치 어댑터 집합을 선언해야 합니다.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.web>
    <!-- Other settings previously specified reside here. -->
    <mobileControls>
      <device name="myDeviceAdapter"
        predicateClass="fullyQualifiedAdapterClass"
        predicateMethod="specificMethodToInvoke"
        pageAdapter="fullyQualifiedPageAdapter">
          <control name="fullyQualifiedControl"
            adapter="fullyQualifiedPageAdapter"/>
          <!-- Add additional control names here. -->
      </device>
    </mobileControls>
  </system.web>
</configuration>

장치 특성 정의

위의 코드 예제와 같이 각 어댑터 집합에는 다음 표에 정의된 특성을 포함해야 합니다.

정의

name

장치 어댑터 집합을 고유하게 식별합니다.

InheritsFrom

선택적 요소. 현재 장치 어댑터 집합이 다른 집합에서 상속됨을 나타냅니다. 상속하는 부모 어댑터 집합은 이름으로 식별됩니다. 부모 장치 어댑터 집합은 같은 Web.config 파일의 동일한 <mobileControls> 섹션에 위치하거나 부모 Web.config 파일에 위치할 수 있습니다.

PredicateClassPredicateMethod

어댑터 집합이 현재 장치에 적절한지 확인하기 위해 호출되는 정적 메서드를 가리킵니다. 이 메서드는 HttpContext 형식의 단일 매개 변수를 사용하고 어댑터 집합이 적용되는지 여부를 나타내는 부울 값을 반환합니다. 이 메서드는 제공된 HttpContext 개체의 Browser 속성을 사용하여 대상 장치의 기능을 검사하고, 이 속성은 MobileCapabilities 개체를 반환합니다.

PageAdapter

장치 집합에 대해 IPageAdapter 인터페이스를 구현하는 형식의 페이지 어댑터 클래스를 나타냅니다.

<device> 섹션에 InheritsFrom 특성이 있으면 PredicateClass, PredicateMethod 또는 PageAdapter 특성을 선언하지 않아도 됩니다. 대신 장치 어댑터 집합은 이러한 특성을 부모 장치 어댑터 집합 정의에서 상속할 수 있습니다.

참고:

이러한 특성은 필수 항목은 아니지만 응용 프로그램에 해당하는 경우 정의할 수 있습니다.

어댑터 집합에 포함할 수 있는 <control> 요소의 수에는 제한이 없으며 각 요소는 특정 컨트롤 어댑터 매핑, 즉 IControlAdapter를 구현하는 클래스를 제공합니다. <control> 요소의 두 가지 특성인 name과 adapter는 각각 매핑할 컨트롤의 클래스와 컨트롤 어댑터의 클래스를 지정합니다.

매핑 고려 사항

컨트롤과 어댑터는 일대일로 매핑되지만 모든 컨트롤/장치 조합에 별도의 컨트롤 어댑터 클래스를 작성할 필요는 없습니다. 일반적으로, 새 모바일 컨트롤이 상속 또는 단순 컴퍼지션을 사용하고 사용자 지정된 출력이 필요하지 않은 경우에는 컨트롤 어댑터가 필요하지 않습니다. 다음과 같은 방법을 고려할 수 있습니다.

  • 어댑터 또는 어댑터 집합을 일반적인 장치 형식에 적용할 수 있습니다. 예를 들어, 모든 HTML 3.2 장치는 동일한 장치 어댑터 집합을 사용할 수 있습니다. 그러나 일부 컨트롤의 경우에는 제한된 장치에만 사용할 수 있는 보다 특수화된 장치 어댑터가 필요할 수 있습니다. 예를 들어, Pocket PC에만 사용할 수 있는 Calendar 컨트롤 장치 어댑터를 작성할 수 있습니다.

  • 컨트롤 어댑터를 개별 컨트롤이 아니라 컨트롤 기본 클래스에 연결할 수 있습니다. 예를 들어, BaseValidator 클래스에서 상속하는 모든 유효성 검사기 컨트롤을 렌더링하려면 어댑터 하나로 충분합니다.

  • 장치 어댑터를 사용하지 않는 완전한 기능의 모바일 컨트롤을 작성할 수 있습니다. 그러나 장치 어댑터를 사용하지 않는 단일 컨트롤이 페이지에 있으면 아키텍처의 유연성이 상실될 수 있으므로 가능하면 장치 어댑터를 작성하는 것이 좋습니다.

  • 사용자 정의 컨트롤, 합성 컨트롤, 상속을 통해 만들었거나 기존 컨트롤을 포함하는 컨트롤 등과 같이, 기존 컨트롤을 확장하여 만든 새 컨트롤의 경우에는 포함된 컨트롤의 어댑터가 사용되므로 장치 어댑터가 필요하지 않습니다.

장치 어댑터 선택 프로세스 이해

다음은 페이지에 사용할 장치 어댑터 집합이 선택되는 프로세스를 설명합니다.

  1. ASP.NET은 Web.config 파일의 <device> 섹션에 정의된 대로 장치 어댑터 집합의 컬렉션을 반복합니다. 요청한 페이지와 가장 가까운 Web.config 파일이 먼저 검사된 다음 구성 계층 구조에서 상위에 있는 각 Web.config 파일이 차례로 검사됩니다. Machine.config 파일은 마지막으로 검사됩니다.

  2. predicateClass 및 predicateMethod 특성을 사용하여 각 장치 어댑터 집합에 연결된 조건자가 확인됩니다.

  3. 각 조건자는 제공된 HttpContext 개체를 사용하여 대상 장치의 장치 기능을 검사한 다음 true 또는 false를 반환하여 해당 장치 어댑터 집합을 사용할 수 있는지 여부를 나타냅니다.

  4. true가 반환되면 장치 어댑터 집합이 선택된 것으로 간주되며 시스템에서는 <device> 요소의 pageAdapter 특성을 사용하여 어떤 클래스의 인스턴스를 만들어 어댑터를 만들지를 결정합니다.

  5. Web.config 파일의 모든 조건자가 true를 반환하지 않으면 부모 디렉터리에 있는 Web.config 파일의 장치 어댑터 집합에 대해 동일한 과정이 반복됩니다.

각 컨트롤에 대해 지정된 컨트롤 형식에 사용할 장치 어댑터를 제공하기 위해 페이지가 호출되며 ASP.NET에서는 다음 단계를 통해 적절한 컨트롤 어댑터를 선택합니다.

  1. 페이지의 장치 어댑터로 선택된 장치 어댑터 집합이 사용됩니다.

  2. 컨트롤 클래스를 장치 어댑터 클래스에 직접 매핑하는 <control> 요소가 장치 어댑터 집합에 들어 있으면 지정된 어댑터 클래스의 인스턴스가 만들어집니다.

  3. 장치 어댑터 집합을 직접 매핑할 수 없으면 컨트롤에 대한 기본 클래스의 새 인스턴스가 만들어집니다.

    기본 클래스 Control을 찾을 때까지 이 과정이 반복됩니다. 적절한 매핑이 발견되면 지정된 장치 어댑터 클래스의 새 인스턴스가 만들어집니다.

  4. 매핑을 찾을 수 없고 장치 어댑터 집합이 다른 어댑터 집합에서 상속되는 경우에는 부모 어댑터 집합에 대해 어댑터 선택 단계가 반복되며 매핑을 찾을 때까지 어댑터 집합 계층 구조 전체에 대해 이 단계가 반복됩니다.

조회 결과가 캐시되므로 첫째 컨트롤에 대해 한 번만 이러한 조회 작업을 수행하면 됩니다. 위에 설명된 동작은 유지됩니다.

참고 항목

기타 리소스

새 장치 어댑터 및 장치 지원 추가