Yapılandırma Yönetimi
Not
Bu e-Kitap 2017 baharında yayımlanmıştır ve o zamandan beri güncelleştirilmemiştir. Kitapta değerli kalan çok şey var, ancak bazı malzemeler güncelliğini yitirmiş.
Ayarlar, bir uygulamanın davranışını koddan yapılandıran verilerin ayrılmasına olanak tanıyarak davranışın uygulamayı yeniden oluşturmadan değiştirilmesini sağlar. İki tür ayar vardır: uygulama ayarları ve kullanıcı ayarları.
Uygulama ayarları, bir uygulamanın oluşturduğu ve yönettiği verilerdir. Sabit web hizmeti uç noktaları, API anahtarları ve çalışma zamanı durumu gibi verileri içerebilir. Uygulama ayarları uygulamanın varlığına bağlıdır ve yalnızca bu uygulama için anlamlıdır.
Kullanıcı ayarları, uygulamanın davranışını etkileyen ve sık sık yeniden ayarlama gerektirmeyen, bir uygulamanın özelleştirilebilir ayarlarıdır. Örneğin, bir uygulama kullanıcının verilerin nereden alınacağını ve ekranda nasıl görüntüleneceğini belirtmesine izin verebilir.
Xamarin.Forms , ayarlar verilerini depolamak için kullanılabilecek kalıcı bir sözlük içerir. Bu sözlüğe özelliği kullanılarak Application.Current.Properties
erişilebilir ve uygulamaya yerleştirilen tüm veriler uygulama uyku durumuna geçtiğinde kaydedilir ve uygulama devam ettiğinde veya yeniden başlatıldığında geri yüklenir. Ayrıca, sınıfı, Application
bir uygulamanın gerektiğinde ayarlarını kaydetmesini sağlayan bir SavePropertiesAsync
yöntemi de vardır. Bu sözlük hakkında daha fazla bilgi için bkz . Özellikler Sözlüğü.
Kalıcı sözlüğü kullanarak verileri depolamanın Xamarin.Forms dezavantajı, verilerin kolayca bağlanmıyor olmasıdır. Bu nedenle, eShopOnContainers mobil uygulaması NuGet'ten edinilebilen Xam.Plugins.Settings kitaplığını kullanır. Bu kitaplık, her platform tarafından sağlanan yerel ayarlar yönetimini kullanırken uygulama ve kullanıcı ayarlarını kalıcı hale getirme ve alma için tutarlı, tür açısından güvenli, platformlar arası bir yaklaşım sağlar. Ayrıca, kitaplık tarafından sunulan ayarlar verilerine erişmek için veri bağlamayı kullanmak kolaydır.
Not
Xam.Plugin.Settings kitaplığı hem uygulama hem de kullanıcı ayarlarını depolayabilir ancak ikisi arasında ayrım yapmaz.
Ayarlar Sınıfı Oluşturma
Xam.Plugins.Settings kitaplığı kullanılırken, uygulamanın gerektirdiği uygulama ve kullanıcı ayarlarını içerecek tek bir statik sınıf oluşturulmalıdır. Aşağıdaki kod örneği, eShopOnContainers mobil uygulamasında Ayarlar sınıfını gösterir:
public static class Settings
{
private static ISettings AppSettings
{
get
{
return CrossSettings.Current;
}
}
...
}
Ayarlar, Xam.Plugins.Settings kitaplığı tarafından sağlanan API aracılığıyla ISettings
okunabilir ve yazılabilir. Bu kitaplık, CrossSettings.Current
API'ye erişmek için kullanılabilecek bir tekli sağlar ve bir uygulamanın ayarlar sınıfı bu singleton'ı bir ISettings
özellik aracılığıyla kullanıma sunmalıdır.
Not
Plugin.Settings ve Plugin.Settings.Abstractions ad alanları için yönergelerin kullanılması, Xam.Plugins.Settings kitaplık türlerine erişim gerektiren bir sınıfa eklenmelidir.
Ayar Ekleme
Her ayar bir anahtardan, varsayılan değerden ve bir özelliğinden oluşur. Aşağıdaki kod örneği, eShopOnContainers mobil uygulamasının bağlandığını çevrimiçi hizmetler temel URL'sini temsil eden bir kullanıcı ayarı için üç öğeyi de gösterir:
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);
}
}
}
Anahtar her zaman anahtar adını tanımlayan sabit bir dizedir ve ayarın varsayılan değeri gerekli türün statik salt okunur değeridir. Varsayılan bir değer sağlamak, ayarsız bir ayar alınırsa geçerli bir değerin kullanılabilir olmasını sağlar.
UrlBase
Statik özellik, ayar değerini okumak veya yazmak için API'den ISettings
iki yöntem kullanır. ISettings.GetValueOrDefault
yöntemi, platforma özgü depolama alanından bir ayarın değerini almak için kullanılır. Ayar için hiçbir değer tanımlanmamışsa, bunun yerine varsayılan değeri alınır. Benzer şekilde yöntemi, bir ayarın ISettings.AddOrUpdateValue
değerini platforma özgü depolamada kalıcı hale getirmek için kullanılır.
Dize, UrlBaseDefault
sınıfı içinde Settings
varsayılan bir değer tanımlamak yerine değerini sınıfından GlobalSetting
alır. Aşağıdaki kod örneğinde bu sınıftaki BaseEndpoint
özellik ve UpdateEndpoint
yöntem gösterilmektedir:
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
Özelliği her ayarlandığında yöntemi UpdateEndpoint
çağrılır. Bu yöntem, tümü eShopOnContainers mobil uygulamasının bağlandığı farklı uç noktaları temsil eden sınıf tarafından Settings
sağlanan kullanıcı ayarını temel alan UrlBase
bir dizi özelliği güncelleştirir.
Kullanıcı Ayarlarına Veri Bağlama
eShopOnContainers mobil uygulamasında iki SettingsView
kullanıcı ayarı kullanıma sunar. Bu ayarlar, uygulamanın Docker kapsayıcıları olarak dağıtılan mikro hizmetlerden veri alıp almayacağının veya uygulamanın İnternet bağlantısı gerektirmeyen sahte hizmetlerden veri alması gerekip gerekmediğinin yapılandırılmasına olanak tanır. Kapsayıcılı mikro hizmetlerden veri almayı seçerken, mikro hizmetler için bir temel uç nokta URL'si belirtilmelidir. Şekil 7-1,kullanıcının kapsayıcılı mikro hizmetlerden veri almayı seçtiği zamanları gösterir SettingsView
.
Şekil 7-1: eShopOnContainers mobil uygulaması tarafından kullanıma sunulan kullanıcı ayarları
Veri bağlama, sınıfı tarafından Settings
kullanıma sunulan ayarları almak ve ayarlamak için kullanılabilir. Bu, görünüm bağlaması üzerindeki denetimler tarafından elde edilir ve böylece sınıftaki özelliklere erişen model özelliklerini Settings
görüntüleyebilir ve ayarlar değeri değiştiyse bir özellik değişikliği bildirimi oluşturulur. eShopOnContainers mobil uygulamasının modelleri nasıl oluşturup görünümlerle ilişkilendirmesi hakkında bilgi için bkz . Model Bulucuyu Görüntüle ile Modeli Otomatik Olarak Oluşturma.
Aşağıdaki kod örneği, kullanıcının kapsayıcılı mikro hizmetler için bir temel uç nokta URL'si girmesini sağlayan denetimi SettingsView
gösterirEntry
:
<Entry Text="{Binding Endpoint, Mode=TwoWay}" />
Bu Entry
denetim, iki yönlü bağlama kullanarak sınıfının özelliğine SettingsViewModel
bağlanırEndpoint
. Aşağıdaki kod örneği Endpoint özelliğini gösterir:
public string Endpoint
{
get { return _endpoint; }
set
{
_endpoint = value;
if(!string.IsNullOrEmpty(_endpoint))
{
UpdateEndpoint(_endpoint);
}
RaisePropertyChanged(() => Endpoint);
}
}
Endpoint
Özellik ayarlandığındaUpdateEndpoint
, sağlanan değerin geçerli olması ve özellik değiştirme bildiriminin tetiklenmiş olması koşuluyla yöntemi çağrılır. Aşağıdaki kod örneği yöntemini gösterir UpdateEndpoint
:
private void UpdateEndpoint(string endpoint)
{
Settings.UrlBase = endpoint;
}
Bu yöntem, sınıfındaki Settings
özelliğini kullanıcı tarafından girilen temel uç nokta URL değeriyle güncelleştirir UrlBase
ve bu da platforma özgü depolama alanında kalıcı olmasını sağlar.
SettingsView
öğesine gidildiğinde, sınıfındaki InitializeAsync
SettingsViewModel
yöntemi yürütülür. Aşağıdaki kod örneği bu yöntemi gösterir:
public override Task InitializeAsync(object navigationData)
{
...
Endpoint = Settings.UrlBase;
...
}
yöntemi, özelliğini sınıfındaki özelliğinin UrlBase
Settings
değerine ayarlarEndpoint
. özelliğine UrlBase
erişmek, Xam.Plugins.Settings kitaplığının platforma özgü depolama alanından ayarlar değerini almasına neden olur. Yönteminin InitializeAsync
nasıl çağrıldığı hakkında bilgi için bkz . Gezinti Sırasında Parametreleri Geçirme.
Bu mekanizma, bir kullanıcı SettingsView'a her geçtiğinde, kullanıcı ayarlarının platforma özgü depolama alanından alınmasını ve veri bağlama aracılığıyla sunulmasını sağlar. Ardından, kullanıcı ayarlar değerlerini değiştirirse, veri bağlama platforma özgü depolama alanına hemen kalıcı hale getirildiğinden emin olur.
Özet
Ayarlar, bir uygulamanın davranışını koddan yapılandıran verilerin ayrılmasına olanak tanıyarak davranışın uygulamayı yeniden oluşturmadan değiştirilmesini sağlar. Uygulama ayarları, bir uygulamanın oluşturduğu ve yönettiği verilerdir ve kullanıcı ayarları, uygulamanın davranışını etkileyen ve sık sık yeniden ayarlama gerektirmeyen, bir uygulamanın özelleştirilebilir ayarlarıdır.
Xam.Plugins.Settings kitaplığı, uygulama ve kullanıcı ayarlarını kalıcı hale getirmek ve almak için tutarlı, tür açısından güvenli, platformlar arası bir yaklaşım sağlar ve kitaplıkla oluşturulan ayarlara erişmek için veri bağlama kullanılabilir.