Deploy silverlight application in "pezzi"
adima non è online. Ultima attività: 10/10/2008 11.00.38adima
Inserito il: 01 settembre 2008 17.31
59 messaggi dal 19 ott 2005 Istalla Microsoft Silverlight!
Ciao,
Sto iniziando a sperimentare Silverligh 2 e mi chiedevo se fosse possibile fare in modo che l'applicazione non venga scaricata completamente all'avvio ma suddivisa in "pezzi" (magari per classi o assembly) scaricabili solo quando effettivamente necessari.
Grazie per l'attenzione, ciao!
Microsoft Most Valuable Professional
RE: Deploy silverlight application in "pezzi"
novecento non è online. Ultima attività: 19/11/2008 0.05.24novecento
Inserito il: 01 settembre 2008 18.10
contributi / Top Poster / Community manager / www.soluzioni4d.it / Blog / 978 messaggi dal 04 mar 2004 Istalla Microsoft Silverlight!
Ciao,
sì, è possibile; puoi dividere la tua applicazione in più parti che siano applicazioni o librerie di classi e caricarle utilizzando la classe WebClient:
WebClient webClient = new WebClient();
webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(WebClient_OpenReadCompleted);
webClient.OpenReadAsync(new Uri("NewApp.xap", UriKind.Relative));


Ovviamente il caricamento è asincrono per non bloccare il resto dell'interfaccia, una volta completato è necessario utilizzare un po' di reflection per creare l'istanza della Page contenuta nel file XAP e creare in memoria l'opportuna gerarchia di assembly referenziati, io lo faccio così:
void WebClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
    string appManifest = new StreamReader(Application.GetResourceStream(new StreamResourceInfo(e.Result, null), new Uri("AppManifest.xaml", UriKind.Relative)).Stream).ReadToEnd();

    Deployment deploy = XamlReader.Load(appManifest) as Deployment;

    Assembly asm = null;

    foreach (AssemblyPart asmPart in deploy.Parts)
    {
        string source = asmPart.Source;
        StreamResourceInfo streamInfo = Application.GetResourceStream(new StreamResourceInfo(e.Result, "application/binary"), new Uri(source, UriKind.Relative));

        if (source == "NewApp.dll")
        {
            asm = asmPart.Load(streamInfo.Stream);
        }
        else
        {
            asmPart.Load(streamInfo.Stream);
        }
    }

    IPage newSection = asm.CreateInstance("NewApp.Page") as IPage;

    if (newSection != null)
    {
        newSection.LoadData();
    }

    placeHolder.Children.Clear();
    placeHolder.Children.Add((UIElement)newSection);
    placeHolder.UpdateLayout();
}


Con il metodo CreateInstance si va proprio a creare l'istanza della Page del nuovo progetto, nell'esempio io uso un interfaccia perchè ho bisogno di chiamare subito dopo un suo metodo (LoadData), che non avrei potuto chiamare in quanto CreateIstance restituisce un Object, subito dopo è possibile posizionarlo nell'applicazione principale aggiungendolo alla collezione di controlli di un "segnaposto" che hai precedentemente piazzato nella pagina, nel metodo Add ho dovuto fare il cast a UIElement perchè i controlli Silverlight non conoscono la mia interfaccia IPage .

E' un po' macchinoso ma è indispensabile perchè altrimenti obblighi l'utente a scaricarsi in un istante un mattone di XAP che magari non vedrà neanche .

Alessio Leoncini
SilverlightItalia.com
RE: Deploy silverlight application in "pezzi"
adima non è online. Ultima attività: 10/10/2008 11.00.38adima
Inserito il: 01 settembre 2008 18.20
59 messaggi dal 19 ott 2005 Istalla Microsoft Silverlight!
Grazie mille per la solerzia; per adesso la mia era solo una curiosità, appena inizierò a creare qualcosa di corposo utilizzerò il tuo consiglio.
Grazie ancora
Ciao
Microsoft Most Valuable Professional
RE: Deploy silverlight application in "pezzi"
novecento non è online. Ultima attività: 19/11/2008 0.05.24novecento
Inserito il: 01 settembre 2008 18.29
contributi / Top Poster / Community manager / www.soluzioni4d.it / Blog / 978 messaggi dal 04 mar 2004 Istalla Microsoft Silverlight!
Prego prego
quando hai fatto qualcosa fai un fischio che sono curioso

Alessio Leoncini
SilverlightItalia.com

Vai a:
Torna al forum |   Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.


gghi - 930 pt
PeppeDotNet - 700 pt
vladimiro - 210 pt

Iscriviti anche tu e raccogli punti. Questo mese in palio Windows Vista Ultimate, ANTS Profiler e 1 ebook!


COMMUNITY
ULTIMI MESSAGGI


IN EVIDENZA
MISC
Powered by .db Forums