Xamarin.Forms DependencyService 소개Xamarin.Forms DependencyService Introduction

샘플 다운로드 샘플 다운로드Download Sample Download the sample

DependencyService 클래스는 Xamarin.Forms 애플리케이션이 공유 코드에서 네이티브 플랫폼 기능을 호출할 수 있도록 하는 서비스 로케이터입니다.The DependencyService class is a service locator that enables Xamarin.Forms applications to invoke native platform functionality from shared code.

DependencyService를 사용하여 네이티브 플랫폼 함수를 호출하는 프로세스는 다음과 같습니다.The process for using the DependencyService to invoke native platform functionality is to:

  1. 공유 코드에서 네이티브 플랫폼 기능용 인터페이스를 만듭니다.Create an interface for the native platform functionality, in shared code. 자세한 내용은 인터페이스 만들기를 참조하세요.For more information, see Create an interface.
  2. 필요한 플랫폼 프로젝트에서 인터페이스를 구현합니다.Implement the interface in the required platform projects. 자세한 내용은 각 플랫폼에서 인터페이스 구현을 참조하세요.For more information, see Implement the interface on each platform.
  3. DependencyService에 플랫폼 구현을 등록합니다.Register the platform implementations with the DependencyService. 이렇게 하면 Xamarin.Forms가 런타임에 플랫폼 구현을 찾을 수 있습니다.This enables Xamarin.Forms to locate the platform implementations at runtime. 자세한 내용은 플랫폼 구현 등록을 참조하세요.For more information, see Register the platform implementations.
  4. 공유 코드에서 플랫폼 구현을 확인하고 호출합니다.Resolve the platform implementations from shared code, and invoke them. 자세한 내용은 플랫폼 구현 확인을 참조하세요.For more information, see Resolve the platform implementations.

다음 다이어그램은 Xamarin.Forms 애플리케이션에서 네이티브 플랫폼 기능이 어떻게 호출되는지 보여 줍니다.The following diagram shows how native platform functionality is invoked in a Xamarin.Forms application:

Xamarin.Forms DependencyService 클래스를 사용하는 서비스 위치 개요Overview of service location using the Xamarin.Forms DependencyService class

인터페이스 만들기Create an interface

공유 코드에서 네이티브 플랫폼 기능을 호출할 수 있는 첫 번째 단계는 네이티브 플랫폼 기능을 조작하기 위한 API를 정의하는 인터페이스를 만드는 것입니다.The first step in being able to invoke native platform functionality from shared code, is to create an interface that defines the API for interacting with the native platform functionality. 이 인터페이스는 공유 코드 프로젝트에 배치되어야 합니다.This interface should be placed in your shared code project.

다음 예제에서는 디바이스의 방향을 검색하는 데 사용할 수 있는 API의 인터페이스를 보여 줍니다.The following example shows an interface for an API that can be used to retrieve the orientation of a device:

public interface IDeviceOrientationService
{
    DeviceOrientation GetOrientation();
}

각 플랫폼에서 인터페이스 구현Implement the interface on each platform

네이티브 플랫폼 기능을 조작하기 위한 API를 정의하는 인터페이스를 만든 후 각 플랫폼 프로젝트에서 인터페이스를 구현해야 합니다.After creating the interface that defines the API for interacting with the native platform functionality, the interface must be implemented in each platform project.

iOSiOS

다음 코드 예제에서는 iOS에서 IDeviceOrientationService 인터페이스의 구현을 보여 줍니다.The following code example shows the implementation of the IDeviceOrientationService interface on iOS:

namespace DependencyServiceDemos.iOS
{
    public class DeviceOrientationService : IDeviceOrientationService
    {
        public DeviceOrientation GetOrientation()
        {
            UIInterfaceOrientation orientation = UIApplication.SharedApplication.StatusBarOrientation;

            bool isPortrait = orientation == UIInterfaceOrientation.Portrait ||
                orientation == UIInterfaceOrientation.PortraitUpsideDown;
            return isPortrait ? DeviceOrientation.Portrait : DeviceOrientation.Landscape;
        }
    }
}

AndroidAndroid

다음 코드 예제에서는 Android에서 IDeviceOrientationService 인터페이스의 구현을 보여 줍니다.The following code example shows the implementation of the IDeviceOrientationService interface on Android:

namespace DependencyServiceDemos.Droid
{
    public class DeviceOrientationService : IDeviceOrientationService
    {
        public DeviceOrientation GetOrientation()
        {
            IWindowManager windowManager = Android.App.Application.Context.GetSystemService(Context.WindowService).JavaCast<IWindowManager>();

            SurfaceOrientation orientation = windowManager.DefaultDisplay.Rotation;
            bool isLandscape = orientation == SurfaceOrientation.Rotation90 ||
                orientation == SurfaceOrientation.Rotation270;
            return isLandscape ? DeviceOrientation.Landscape : DeviceOrientation.Portrait;
        }
    }
}

UWPUniversal Windows Platform

다음 코드 예제는 UWP(유니버설 Windows 플랫폼)에서 IDeviceOrientationService 인터페이스의 구현을 보여 줍니다.The following code example shows the implementation of the IDeviceOrientationService interface on the Universal Windows Platform (UWP):

namespace DependencyServiceDemos.UWP
{
    public class DeviceOrientationService : IDeviceOrientationService
    {
        public DeviceOrientation GetOrientation()
        {
            ApplicationViewOrientation orientation = ApplicationView.GetForCurrentView().Orientation;
            return orientation == ApplicationViewOrientation.Landscape ? DeviceOrientation.Landscape : DeviceOrientation.Portrait;
        }
    }
}

플랫폼 구현 등록Register the platform implementations

각 플랫폼 프로젝트에서 인터페이스를 구현한 후 DependencyService에 플랫폼 구현을 등록해야 Xamarin.Forms가 런타임에 해당 구현을 찾을 수 있습니다.After implementing the interface in each platform project, the platform implementations must be registered with the DependencyService, so that Xamarin.Forms can locate them at runtime. 이 작업은 일반적으로 지정된 형식이 인터페이스의 구현을 제공함을 나타내는 DependencyAttribute를 사용하여 수행합니다.This is typically performed with the DependencyAttribute, which indicates that the specified type provides an implementation of the interface.

다음 예제에서는 DependencyAttribute를 사용하여 IDeviceOrientationService 인터페이스의 iOS 구현을 등록하는 방법을 보여 줍니다.The following example shows using the DependencyAttribute to register the iOS implementation of the IDeviceOrientationService interface:

using Xamarin.Forms;

[assembly: Dependency(typeof(DependencyServiceDemos.iOS.DeviceOrientationService))]
namespace DependencyServiceDemos.iOS
{
    public class DeviceOrientationService : IDeviceOrientationService
    {
        public DeviceOrientation GetOrientation()
        {
            ...
        }
    }
}

이 예제에서 DependencyAttributeDependencyServiceDeviceOrientationService를 등록합니다.In this example, the DependencyAttribute registers the DeviceOrientationService with the DependencyService. 마찬가지로 다른 플랫폼의 IDeviceOrientationService 인터페이스 구현은 DependencyAttribute를 사용하여 등록해야 합니다.Similarly, the implementations of the IDeviceOrientationService interface on other platforms should be registered with the DependencyAttribute.

DependencyService에 플랫폼 구현을 등록하는 방법에 대한 자세한 내용은 Xamarin.Forms DependencyService 등록 및 확인을 참조하세요.For more information about registering platform implementations with the DependencyService, see Xamarin.Forms DependencyService Registration and Resolution.

플랫폼 구현 확인Resolve the platform implementations

DependencyService에 플랫폼 구현을 등록한 후 호출하기 전에 구현을 확인해야 합니다.Following registration of platform implementations with the DependencyService, the implementations must be resolved before being invoked. 이 작업은 일반적으로 공유 코드에서 DependencyService.Get<T> 메서드를 사용하여 수행합니다.This is typically performed in shared code using the DependencyService.Get<T> method.

다음 코드는 Get<T> 메서드를 호출하여 IDeviceOrientationService 인터페이스를 확인한 후 해당 GetOrientation 메서드를 호출하는 예제를 보여 줍니다.The following code shows an example of calling the Get<T> method to resolve the IDeviceOrientationService interface, and then invoking its GetOrientation method:

IDeviceOrientationService service = DependencyService.Get<IDeviceOrientationService>();
DeviceOrientation orientation = service.GetOrientation();

또는 이 코드를 다음 한 줄로 요약할 수 있습니다.Alternatively, this code can be condensed into a single line:

DeviceOrientation orientation = DependencyService.Get<IDeviceOrientationService>().GetOrientation();

DependencyService를 사용하여 플랫폼 구현을 확인하는 방법에 대한 자세한 내용은 Xamarin.Forms DependencyService 등록 및 확인을 참조하세요.For more information about resolving platform implementations with the DependencyService, see Xamarin.Forms DependencyService Registration and Resolution.