Plattformabstraktion mit der portablen Klassenbibliothek

Wenn Sie mit .NET Framework für mehrere Plattformen entwickeln, helfen Ihnen portable Klassenbibliotheken dabei, die Wiederverwendung von Code zu maximieren. Manchmal ist es aber erforderlich, plattformspezifischen Code zu abstrahieren, um Zirkelverweise zu vermeiden. In diesem Artikel wird ein Beispiel hierfür vorgestellt.

Verwenden einer abstrakten Klasse mit der portablen Klassenbibliothek

Häufig möchten Sie nicht übertragbare Member von einer übertragbaren Klasse aufrufen. Sie können nicht übertragbare Member nicht direkt aufrufen, da diese nicht im Projekt für die portable Klassenbibliothek verfügbar sind. Stattdessen können Sie eine abstrakte Klasse im Projekt der portablen Klassenbibliothek erstellen und diese von sämtlichem übertragbarem Code verwenden.

Die abstrakte Klasse sollte abstrakte Methoden deklarieren, die Sie im übertragbaren Code benötigen, sowie eine öffentliche statische Eigenschaft, die eine Instanz von sich selbst ist und die Sie verwenden, um die Klasse im plattformspezifischen Code zu initialisieren.

Im plattformspezifischen Projekt erstellen Sie eine untergeordnete Klasse der abstrakten Klasse und implementieren die Methoden mit plattformspezifischem Verhalten. Außerdem initialisieren Sie die plattformspezifische Instanz, sodass sie vom übertragbaren Code verwendet werden kann.

Im folgenden Beispiel wird eine übertragbare Klasse für das Arbeiten mit lokalen Einstellungen angezeigt. Lokale Einstellungen werden in Windows Store-Apps und in Silverlight-Apps unterschiedlich behandelt, daher stellt die übertragbare Klasse keine Implementierungsdetails bereit. Die Implementierung wird in den plattformspezifischen abgeleiteten Klassen bereitgestellt.

Namespace ExamplePortableLibrary
    Public MustInherit Class ExampleLocalSettings
        Public MustOverride Sub SetLocalValue(name As String, value As Object)

        Public Shared Property Instance As ExampleLocalSettings
    End Class
End Namespace
using System;

namespace ExamplePortableLibrary
{
    public abstract class ExampleLocalSettings
    {
        public abstract void SetLocalValue(string name, object value);

        public static ExampleLocalSettings Instance { get; set; }
    }
}

Fügen Sie in dem Silverlight-Projekt einen Verweis auf die übertragbare Assembly hinzu und erstellen Sie anschließend eine untergeordnete Klasse, die den lokalen Einstellungsvorgang implementiert, der spezifisch ist für eine Silverlight-Umgebung. Im folgenden Beispiel wird eine vollständige Silverlight-Implementierung der ExampleLocalSettings-Klasse gezeigt.

Imports ExamplePortableLibrary
Imports System.IO.IsolatedStorage;

Public Class SilverlightImplementation
    Inherits ExampleLocalSettings

    Public Overrides Sub SetLocalValue(name As String, value As Object)
        IsolatedStorageSettings.ApplicationSettings.Add(name, value)
    End Sub
End Class
using System;
using System.IO.IsolatedStorage;
using ExamplePortableLibrary;

namespace SilverlightApplication1
{
    class SilverlightImplementation : ExampleLocalSettings
    {
        public override void SetLocalValue(string name, object value)
        {
            IsolatedStorageSettings.ApplicationSettings.Add(name, value);
        }
    }
}

Fügen Sie in der Windows Store-App einen Verweis auf die übertragbare Assembly hinzu und erstellen Sie anschließend eine untergeordnete Klasse, die den lokalen Einstellungsvorgang implementiert, der spezifisch ist für Windows Store-Apps. Im folgenden Beispiel wird eine Implementierung der ExampleLocalSettings-Klasse für eine Windows Store-App veranschaulicht.

Imports Windows.Storage
Imports ExamplePortableLibrary

Public Class AppImplementation
    Inherits ExampleLocalSettings

    Public Overrides Async Sub SetLocalValue(name As String, value As Object)
        ApplicationData.Current.LocalSettings.Values(name) = value
    End Sub
End Class
using System;
using Windows.Storage;
using ExamplePortableLibrary;

namespace App1
{
    class AppImplementation : ExampleLocalSettings
    {
        public override void SetLocalValue(string name, object value)
        {
            ApplicationData.Current.LocalSettings.Values[name] = value;
        }
    }
}

In der Silverlight-App und der Windows Store-App müssen Sie die konkrete Implementierung der untergeordneten Klasse initialisieren und auf die Instance-Eigenschaft festlegen. Normalerweise erstellen Sie diese Instanz, wenn die App beginnt. In diesem Beispiel wird die Initialisierung der Silverlight-Implementierung erläutert:

ExampleLocalSettings.Instance = new SilverlightImplementation();
ExampleLocalSettings.Instance = New SilverlightImplementation()

So erfolgt die Initialisierung der Implementierung für die Windows Store-App:

ExampleLocalSettings.Instance = new AppImplementation();
ExampleLocalSettings.Instance = New AppImplementation()

Im Projekt der portablen Klassenbibliothek können Sie die Instance-Eigenschaft dazu verwenden, die SetLocalValue-Methode wie folgt aufzurufen:

ExampleLocalSettings.Instance.SetLocalValue("ExampleSetting", "New value to add");
ExampleLocalSettings.Instance.SetLocalValue("ExampleSetting ", "New value to add")

Siehe auch

Konzepte

Plattformübergreifende Entwicklung mit der portablen Klassenbibliothek

Verwenden der portablen Klassenbibliothek mit Model-View-View Model

Weitere Ressourcen

Windows Phone and Windows 8 app development

Erstellen universeller Windows-Apps für Windows und Windows Phone