Abstraction de plateforme avec la bibliothèque de classes portable

Quand vous développez pour plusieurs plateformes à l'aide du .NET Framework, la bibliothèque de classes portables vous permet d'optimiser le recyclage de code. Toutefois, vous êtes parfois amené à abstraire le code propre à une plateforme pour éviter les références circulaires. Cet article fournit un exemple.

Utilisation d'une classe abstraite avec la bibliothèque de classes portables

Il est fréquent d'avoir à appeler des membres non portables à partir d'une classe portable. Vous ne pouvez pas appeler des membres non portables directement, car ces membres ne sont pas disponibles dans le projet de bibliothèque de classes portables. À la place, vous pouvez créer une classe abstraite dans le projet de bibliothèque de classes portables et utiliser cette classe pour tous les codes portables.

La classe abstraite doit déclarer des méthodes abstraites à utiliser dans le code portable, ainsi qu'une propriété statique publique qui est une instance d'elle-même et qui vous permettra d'initialiser la classe dans le code propre à la plateforme.

Dans le projet spécifique à la plateforme, vous créez une classe enfant de la classe abstraite et implémentez les méthodes avec des comportements spécifiques à la plateforme. Vous initialisez également l'instance propre à la plateforme pour que le code portable puisse l'utiliser.

L'exemple ci-dessous illustre une classe portable permettant d'utiliser les paramètres locaux. Comme les paramètres locaux sont gérés différemment dans une application du Windows Store et une application Silverlight, la classe portable ne fournit aucun détail d'implémentation. L'implémentation est fournie dans les classes dérivées propres à la plateforme.

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; }
    }
}

Dans votre projet Silverlight, vous ajoutez une référence à l'assembly portable, puis créez une classe enfant qui implémente l'opération de configuration locale spécifique à l'environnement Silverlight. Cet exemple illustre une implémentation Silverlight de la classe ExampleLocalSettings :

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);
        }
    }
}

Dans votre application du Windows Store, vous ajoutez une référence à l'assembly portable, puis créez une classe enfant qui implémente l'opération de configuration locale spécifique aux applications du Windows Store. Cet exemple illustre une implémentation de la classe ExampleLocalSettings pour une application du Windows Store :

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;
        }
    }
}

Dans l'application Silverlight et l'application du Windows Store, vous devez initialiser l'implémentation spécifique de la classe enfant et lui affecter la valeur de la propriété Instance. En général, vous créez cette instance au démarrage de l'application. Cet exemple indique comment initialiser l'implémentation Silverlight :

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

Voici comment initialiser l'implémentation pour l'application du Windows Store :

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

Dans votre projet de bibliothèque de classes portables, vous pouvez utiliser la propriété Instance pour appeler la méthode SetLocalValue comme suit :

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

Voir aussi

Concepts

Développement interplateforme avec la bibliothèque de classes portable

Utilisation de la Bibliothèque de classes portable avec le modèle d'affichage Modèle-Affichage

Autres ressources

Développement d'applications pour Windows Phone et Windows 8

Créer des applications Windows universelles qui ciblent Windows et Windows Phone