Schreiben Sie plattformspezifischen Code in Xamarin.Forms
Habe ich Folgendes Xamarin.Forms.ContentPage
Klasse Struktur
public class MyPage : ContentPage
{
public MyPage()
{
//do work to initialize MyPage
}
public void LogIn(object sender, EventArgs eventArgs)
{
bool isAuthenticated = false;
string accessToken = string.Empty;
//do work to use authentication API to validate users
if(isAuthenticated)
{
//I would to write device specific code to write to the access token to the device
//Example of saving the access token to iOS device
NSUserDefaults.StandardUserDefaults.SetString(accessToken, "AccessToken");
//Example of saving the access token to Android device
var prefs = Application.Context.GetSharedPreferences("MySharedPrefs", FileCreationMode.Private);
var prefsEditor = prefs.Edit();
prefEditor.PutString("AccessToken", accessToken);
prefEditor.Commit();
}
}
}
Möchte ich schreiben, Plattform-spezifischen code, in der MyPage
LogIn
- Methode zum speichern der access-token-basierend auf dem Gerät, OS, die Sie mit meiner Bewerbung.
Wie kann ich nur ausführen, Geräte-spezifischer code, wenn der Benutzer meine Anwendung auf Ihrem Gerät?
InformationsquelleAutor der Frage Michael Kniskern | 2014-06-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist ein Szenario, das ist einfach zu lösen mit dependency injection.
Haben ein interface mit den gewünschten Methoden auf Ihre freigegebenen-oder PCL-code, wie:
Haben eine Eigenschaft, die auf Ihrem
App
Klasse, Schnittstelle:Erstellen, die Plattform-spezifische Implementierungen auf Ihre Ziel Projekte:
iOS:
Android:
Dann auf jeder Plattform-spezifische Projekt erstellen, die eine Implementierung von
IUserPreferences
und legen Sie es entwederApp.Init(new iOSUserPrefernces())
undApp.Init(new AndroidUserPrefernces())
Methoden.Schließlich könnten Sie den code ändern zu:
InformationsquelleAutor der Antwort Pedro
Gibt es mehrere Antworten, je nachdem, was Sie erreichen wollen, und die Art von Projekt, das Sie haben:
Führen verschiedene
Xamarin.Forms
code auf verschiedenen Plattformen.Verwenden Sie diese, wenn Sie z.B. wollen verschiedene Schriftgrößen auf verschiedenen Plattformen:
Ausführen von Plattform-spezifischen code, in einer gemeinsamen (PCL) Projekt
Das gemeinsame Muster ist die Verwendung von DI (dependency injection).
Xamarin.Forms
bietet eine einfacheDependencyService
für diese, aber verwenden Sie, was Sie wollen.Ausführen plattformspezifischer code in gemeinsam genutzten (Shared Asset Project) Projekt
Wie der code kompiliert wird, je nach Plattform, Sie können wickeln Sie Ihre Plattform-spezifischen code, in
#if __PLATFORM__
#endif
und haben alle den code in der gleichen Datei. Die Plattform-Projekt definieren sollte__IOS__
,__ANDROID__
und__WINDOWS_PHONE__
. Beachten Sie, dass eine gemeinsame asset-Projekt mitXaml
und der code funktioniert nicht gut für iOSXamarin.Studio
sowie compiler-Direktiven lässt sich der code schwieriger zu Lesen und zu testen.InformationsquelleAutor der Antwort Stephane Delcroix
Scheint dies weniger über
Xamarin.Forms
und mehr über die Verwendung von Standardeinstellungen in einer PCL. Check-out James Montemagno die github repo für doing cross-Plattform-Standard.Dann rufen Sie seine statische Methoden für das setzen/abrufen. Das nuget-Paket wird
Xam.Plugins.Settings
.Es kann z.B. so verwendet werden:
...
InformationsquelleAutor der Antwort valdetero
Xamarin.Formen hat einen gebaut-in Abhängigkeit Injektor, wenn man einen Blick auf Ihren Führer in den Entwickler-Bereich Ihrer website (http://developer.xamarin.com/guides/cross-platform/xamarin-forms/dependency-service/)
Gibt es auch eine wunderbare Bibliothek, die Sie ziehen können von NuGet/Github ( https://github.com/aritchie/acr-xamarin-forms ), der Griff lässt sich der Speicherbedarf, die Sie suchen... werfen Sie einen Blick auf die Einstellungen-service gibt, wird es auch handhaben Serialisierung komplexer Objekte.
InformationsquelleAutor der Antwort J Geary