AdSence

Page List

    Silverlight - Chargement à la demande avec MEF

    by malbaladejo 8. juin 2010 17:46

    Introduction


    MEF (Microsoft Extensibility Framework) est un framework proposé par Microsoft permettant de développer des applications modulaires, composées de plugins qu’il est possible de charger/décharger à la demande de l’utilisateur.

    Dans le cas d'une application de type client lourd (par exemple), tous les plugins sont présents sur le poste client et l'application peut les charger quand elle en a besoin.

    En Silverlight, les plugins sont sur le serveur et il faut les télécharger sur le poste client avant de pouvoir les exécuter.

    Le but de cet article est de montrer comment décomposer un controle Silverlight en plusieurs modules (fichier xap) contenant une ou plusieurs pages et de télécharger un module uniquement lorsqu'une des ces pages doit être affichée.

    Présentation de la solution



    mal.Web.Silverlight.MEF.Core :
    mal.Web.Silverlight.MEF.Core est le projet de base, qui contiendra tous les éléments (interfaces, attributs, ...) qui seront communs aux différents projets de notre solution.
    mal.Web.Silverlight.MEF.Shell : mal.Web.Silverlight.MEF.Shell est l’application Silverlight qui va héberger les différentes modules et qui va permetrre de naviguer entre les pages des modules.
    mal.Web.Silverlight.MEF.Module1 et mal.Web.Silverlight.MEF.Module2 :
    mal.Web.Silverlight.MEF.Module1 et mal.Web.Silverlight.MEF.Module2 sont les 2 modules qui téléchargés à la demande.
    mal.Web.Silverlight.MEF.Shell.Web :
    Et enfin mal.Web.Silverlight.MEF.Shell.Web est le projet qui héberge tout ça.

    mal.Web.Silverlight.MEF.Core

    ExportModulePageAttribute

    Les pages téléchargées avec MEF doivent avoir un attribut ExportAttribute.
    Dans mon projet, j'ai crée un attribut ExportModulePageAttribute qui hérite de ExportAttribute.
    ExportModulePageAttribute ajouter une propriété NavigateUri qui permet de connaitre l'Url de la page.

    [MetadataAttribute] [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)] public class ExportModulePageAttribute : ExportAttribute, IModuleMetadata { public ExportModulePageAttribute(): base(typeof(Page)) { } public string NavigateUri { get; set; } }

    ModulesLoader

    ModulesLoader est la classe qui télécharge les modules grâce à la méthode suivante :

    public void LoadModule(Module module) { OnModuleLoading(module); DeploymentCatalogService.Instance.AddXap(module.Package); }

    A suivre ...

    Les sources sont ici : mal.Web.Silverlight.MEF.zip

    Références :
    http://mef.codeplex.com/
    Développer un système de plugins pour une application Silverlight avec le Microsoft Extensibility Framework
    Dynamically Loaded Pages, Now MEF Powered!
    INavigationContentLoader Interface

    Actuellement noté 3.0 par 5 personne(s)

    • Currently 3/5 Stars.
    • 1
    • 2
    • 3
    • 4
    • 5

    Tags:

    Commentaires

    Ajouter un commentaire


     

      Country flag

    biuquote
    • Commentaire
    • Aperçu immédiat
    Loading



    Powered by BlogEngine.NET 1.4.5.0
    Theme by Mads Kristensen