구성 관리

참고 항목

이 전자책은 2017년 봄에 게시되었으며 그 이후로 업데이트되지 않았습니다. 이 책에는 귀중한 기본 많이 있지만 일부 자료는 구식입니다.

설정을 사용하면 코드에서 앱의 동작을 구성하는 데이터를 분리할 수 있으므로 앱을 다시 빌드하지 않고도 동작을 변경할 수 있습니다. 설정에는 앱 설정과 사용자 설정의 두 가지 유형이 있습니다.

앱 설정은 앱이 만들고 관리하는 데이터입니다. 고정 웹 서비스 엔드포인트, API 키 및 런타임 상태와 같은 데이터를 포함할 수 있습니다. 앱 설정은 앱의 존재와 관련이 있으며 해당 앱에만 의미가 있습니다.

사용자 설정은 앱의 동작에 영향을 주며 자주 다시 조정할 필요가 없는 앱의 사용자 지정 가능한 설정입니다. 예를 들어 앱에서 사용자가 데이터를 검색할 위치와 화면에 표시하는 방법을 지정할 수 있습니다.

Xamarin.Forms 에는 설정 데이터를 저장하는 데 사용할 수 있는 영구 사전이 포함되어 있습니다. 이 사전은 속성을 사용하여 Application.Current.Properties 액세스할 수 있으며, 앱이 절전 상태로 전환될 때 저장되고 앱이 다시 시작되거나 다시 시작될 때 복원됩니다. 또한 Application 클래스에는 SavePropertiesAsync 필요한 경우 앱에서 해당 설정을 저장할 수 있는 메서드도 있습니다. 이 사전에 대한 자세한 내용은 속성 사전을 참조 하세요.

영구 사전을 사용하여 Xamarin.Forms 데이터를 저장하는 단점은 데이터가 쉽게 바인딩되지 않는다는 것입니다. 따라서 eShopOnContainers 모바일 앱은 Xam.Plugins를 사용합니다. 설정 라이브러리( NuGet. 이 라이브러리는 각 플랫폼에서 제공하는 네이티브 설정 관리를 사용하는 동시에 앱 및 사용자 설정을 유지 및 검색하기 위한 일관되고 형식이 안전한 플랫폼 간 접근 방식을 제공합니다. 또한 데이터 바인딩을 사용하여 라이브러리에서 노출하는 설정 데이터에 액세스하는 것은 간단합니다.

참고 항목

Xam.Plugin 동안. 설정 라이브러리는 앱과 사용자 설정을 모두 저장할 수 있으므로 두 설정을 구분하지 않습니다.

설정 클래스 만들기

Xam.Plugins를 사용하는 경우 라이브러리를 설정 앱에 필요한 앱 및 사용자 설정을 포함하는 단일 정적 클래스를 만들어야 합니다. 다음 코드 예제에서는 eShopOnContainers 모바일 앱의 설정 클래스를 보여줍니다.

public static class Settings  
{  
    private static ISettings AppSettings  
    {  
        get  
        {  
            return CrossSettings.Current;  
        }  
    }  
    ...  
}

설정 읽고 쓸 수 있습니다.ISettings Xam.Plugins에서 제공하는 API입니다. 설정 라이브러리입니다. 이 라이브러리는 API에 액세스하는 데 사용할 수 있는 싱글톤을 제공하며, CrossSettings.Current앱의 설정 클래스는 속성을 통해 이 싱글톤을 ISettings 노출해야 합니다.

참고 항목

플러그 인에 지시문을 사용합니다. 설정 및 플러그 인입니다. 설정. Xam.Plugins에 액세스해야 하는 클래스에 추상화 네임스페이스를 추가해야 합니다. 라이브러리 형식을 설정.

설정 추가

각 설정은 키, 기본값 및 속성으로 구성됩니다. 다음 코드 예제에서는 eShopOnContainers 모바일 앱이 연결하는 온라인 서비스 대한 기본 URL을 나타내는 사용자 설정에 대한 세 가지 항목을 모두 보여 줍니다.

public static class Settings  
{  
    ...  
    private const string IdUrlBase = "url_base";  
    private static readonly string UrlBaseDefault = GlobalSetting.Instance.BaseEndpoint;  
    ...  

    public static string UrlBase  
    {  
        get  
        {  
            return AppSettings.GetValueOrDefault<string>(IdUrlBase, UrlBaseDefault);  
        }  
        set  
        {  
            AppSettings.AddOrUpdateValue<string>(IdUrlBase, value);  
        }  
    }  
}

키는 항상 키 이름을 정의하는 const 문자열이며, 설정의 기본값은 필수 형식의 정적 읽기 전용 값입니다. 기본값을 제공하면 설정되지 않은 설정을 검색할 경우 유효한 값을 사용할 수 있습니다.

정적 속성은 UrlBase API의 두 가지 메서드를 ISettings 사용하여 설정 값을 읽거나 씁니다. 이 ISettings.GetValueOrDefault 메서드는 플랫폼별 스토리지에서 설정의 값을 검색하는 데 사용됩니다. 설정에 대해 정의된 값이 없으면 해당 기본값이 대신 검색됩니다. 마찬가지로 이 ISettings.AddOrUpdateValue 메서드는 설정 값을 플랫폼별 스토리지에 유지하는 데 사용됩니다.

클래스 내에서 기본값을 Settings 정의하는 대신 문자열은 UrlBaseDefault 클래스에서 GlobalSetting 해당 값을 가져옵니다. 다음 코드 예제에서는 이 클래스의 BaseEndpoint 속성과 UpdateEndpoint 메서드를 보여줍니다.

public class GlobalSetting  
{  
    ...  
    public string BaseEndpoint  
    {  
        get { return _baseEndpoint; }  
        set  
        {  
            _baseEndpoint = value;  
            UpdateEndpoint(_baseEndpoint);  
        }  
    }  
    ...  

    private void UpdateEndpoint(string baseEndpoint)  
    {  
        RegisterWebsite = string.Format("{0}:5105/Account/Register", baseEndpoint);  
        CatalogEndpoint = string.Format("{0}:5101", baseEndpoint);  
        OrdersEndpoint = string.Format("{0}:5102", baseEndpoint);  
        BasketEndpoint = string.Format("{0}:5103", baseEndpoint);  
        IdentityEndpoint = string.Format("{0}:5105/connect/authorize", baseEndpoint);  
        UserInfoEndpoint = string.Format("{0}:5105/connect/userinfo", baseEndpoint);  
        TokenEndpoint = string.Format("{0}:5105/connect/token", baseEndpoint);  
        LogoutEndpoint = string.Format("{0}:5105/connect/endsession", baseEndpoint);  
        IdentityCallback = string.Format("{0}:5105/xamarincallback", baseEndpoint);  
        LogoutCallback = string.Format("{0}:5105/Account/Redirecting", baseEndpoint);  
    }  
}

속성을 설정할 때마다 BaseEndpoint 메서드가 UpdateEndpoint 호출됩니다. 이 메서드는 eShopOnContainers 모바일 앱이 연결하는 여러 엔드포인트를 나타내는 클래스에서 제공하는 Settings 사용자 설정을 기반으로 UrlBase 하는 일련의 속성을 업데이트합니다.

사용자 설정 데이터 바인딩

eShopOnContainers 모바일 앱 SettingsView 에서 두 개의 사용자 설정을 노출합니다. 이러한 설정을 통해 앱이 Docker 컨테이너로 배포된 마이크로 서비스에서 데이터를 검색해야 하는지 또는 앱이 인터넷 연결이 필요하지 않은 모의 서비스에서 데이터를 검색해야 하는지 여부를 구성할 수 있습니다. 컨테이너화된 마이크로 서비스에서 데이터를 검색하도록 선택할 때 마이크로 서비스에 대한 기본 엔드포인트 URL을 지정해야 합니다. 그림 7-1은 사용자가 컨테이너화된 마이크로 서비스에서 데이터를 검색하도록 선택한 경우를 보여 SettingsView 줍니다.

User settings exposed by the eShopOnContainers mobile app

그림 7-1: eShopOnContainers 모바일 앱에서 노출하는 사용자 설정

데이터 바인딩을 사용하여 클래스에서 노출하는 Settings 설정을 검색하고 설정할 수 있습니다. 이는 뷰 바인딩의 컨트롤이 클래스의 속성 Settings 에 액세스하는 모델 속성을 보고 설정 값이 변경된 경우 속성 변경 알림을 발생시키는 방식으로 수행됩니다. eShopOnContainers 모바일 앱이 보기 모델을 생성하고 뷰에 연결하는 방법에 대한 자세한 내용은 보기 모델 로케이터를 사용하여 보기 모델 자동 만들기를 참조하세요.

다음 코드 예제에서는 사용자가 컨테이너화된 마이크로 서비스에 대한 기본 엔드포인트 URL을 입력할 수 있는 컨트롤 SettingsView 을 보여 Entry 줍니다.

<Entry Text="{Binding Endpoint, Mode=TwoWay}" />

Entry 컨트롤은 양방향 바인딩을 사용하여 SettingsViewModel 클래스의 Endpoint 속성에 바인딩됩니다. 다음 코드 예제에서는 엔드포인트 속성을 보여줍니다.

public string Endpoint  
{  
    get { return _endpoint; }  
    set  
    {  
        _endpoint = value;  

        if(!string.IsNullOrEmpty(_endpoint))  
        {  
            UpdateEndpoint(_endpoint);  
        }  

        RaisePropertyChanged(() => Endpoint);  
    }  
}

속성이 Endpoint 설정 UpdateEndpoint 되면 제공된 값이 유효하고 속성 변경 알림이 발생하는 경우 메서드가 호출됩니다. 다음 코드 예제는 UpdateEndpoint 메서드를 보여줍니다.

private void UpdateEndpoint(string endpoint)  
{  
    Settings.UrlBase = endpoint;  
}

이 메서드는 UrlBase 사용자가 입력한 기본 엔드포인트 URL 값으로 클래스의 속성을 Settings 업데이트하므로 플랫폼별 스토리지에 유지됩니다.

탐색할 SettingsView 때 클래스의 InitializeAsync 메서드가 SettingsViewModel 실행됩니다. 다음 코드 예제에서는 이 메서드를 보여줍니다.

public override Task InitializeAsync(object navigationData)  
{  
    ...  
    Endpoint = Settings.UrlBase;  
    ...  
}

메서드는 클래스의 Endpoint 속성 값으로 UrlBaseSettings 속성을 설정합니다. 속성에 UrlBase 액세스하면 Xam.Plugins.설정 라이브러리가 플랫폼별 스토리지에서 설정 값을 검색합니다. 메서드가 InitializeAsync 호출되는 방법에 대한 자세한 내용은 탐색 중에 매개 변수 전달을 참조하세요.

이 메커니즘은 사용자가 설정View로 이동할 때마다 플랫폼별 스토리지에서 사용자 설정을 검색하고 데이터 바인딩을 통해 표시되도록 합니다. 그런 다음 사용자가 설정 값을 변경하는 경우 데이터 바인딩은 플랫폼별 스토리지에 즉시 다시 유지되도록 합니다.

요약

설정을 사용하면 코드에서 앱의 동작을 구성하는 데이터를 분리할 수 있으므로 앱을 다시 빌드하지 않고도 동작을 변경할 수 있습니다. 앱 설정은 앱이 만들고 관리하는 데이터이며, 사용자 설정은 앱의 동작에 영향을 주며 자주 다시 조정할 필요가 없는 앱의 사용자 지정 가능한 설정입니다.

Xam.Plugins입니다. 설정 라이브러리는 앱 및 사용자 설정을 유지 및 검색하기 위한 일관되고 형식 안전하며 플랫폼 간 접근 방식을 제공하며, 데이터 바인딩을 사용하여 라이브러리로 만든 설정에 액세스할 수 있습니다.