Technology Experience
Senza categoria

Leggere i settings contenuti nel web.config da un’applicazione Silverlight 4

E’ l’esigenza più vecchia del mondo, cioè inserire da qualche parte le impostazioni della nostra applicazione, ed ovviamente andare poi a leggerli per modificare il comportamento dell’applicazione stessa. Ho trovato questo articolo su Codeproject che spiega come risolvere questa esigenza: l’articolo si basa su Silverlight 3 – io con il 4 ho trovato qualche differenza minimale, che comunque non mi ha bloccato più di tanto. Ecco i passi da fare.

1) Aggiungere nel web.config uno o più parametri
Dietro ogni progetto Silverlight che si rispetti, c’è sempre un progetto Web che lo deploya! 🙂 In questo progetto Web avete già bello & pronto il file web.config, per cui è sufficiente aprirlo ed inserire tutte le impostazioni che vi servono. Ad esempio:

<?xml version="1.0"?>
<configuration>
 <appSettings>
 <add key="Language" value="it-IT" />
 </appSettings>
 <system.web>
 <compilation debug="true" targetFramework="4.0" />
 </system.web>
</configuration>

 

La cosa è molto semplice: ho aggiunto un setting con key=”Language” e value=”it-IT”.

2) Modificare la pagina aspx che carica e renderizza il plugin Silverlight
Qui la cosa è un po’ diversa da come viene raccontata nell’articolo linkato prima. All’interno del progetto Web avete sicuramente una pagina aspx, che poi è quella che viene caricata nel browser, ed è quella che contiene il plug-in Silverlight, etc. etc. E’ necessario modificare questa pagina, ed il suo relativo code-behind. Ma c’è un problema: la pagina aspx che viene creata di default quando create un progetto Silverlight non ha code-behind. Io ho risolto facendo così:

2a) Aggiunta di una nuova pagina Startup.aspx
Nulla di particolare, qui. Da VS2010, ho fatto semplicemente Add New Item –> Web –> WebForm, e ho dato il nome Startup.aspx.

2b) Ho copiato & incollato il contenuto della pagina .aspx originale a questa nuova Startup.aspx
Dunque, supponiamo che il progetto Silverlight su cui state lavorando si chiami Pippo. La pagina aspx dovrebbe presentarsi nella forma PippoTestPage.aspx. Ho copiato tutto il codice aspx da questa pagina alla pagina aspx nuova, ovvero Startup.aspx.

2c) Modifica di Startup.aspx (aggiunta del controllo Literal)
All’interno del tag <object></object> di Silverlight ho aggiunto questo controllo:

<asp:Literal ID="ParamInitParams" runat="server"></asp:Literal>

 

2d) Modifica di Startup.aspx (modifica della direttiva @Page)
Questo è il motivo per cui ho dovuto creare una nuova pagina Startup.aspx: perchè qui abbiamo il code-behind, in quella originale no. Ma c’è ancora qualcosa da sistemare: è vero che fisicamente il file Startup.aspx.cs, ma è anche vero che i files Startup.aspx <—> Startup.aspx.cs non sono legati. Quindi, ho modificato la direttiva @Page di Startup.aspx, aggiungendo gli attributi CodeBehind e Inherits. Ecco come si presenta il tutto:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Startup.aspx.cs" Inherits="ViewModelWithMEF.Web.Startup" %>

 

Questo serve, altrimenti dal code-behind ovviamente non riusciamo ad accedere al controllo Literal definito allo step precedente.

2e) Modifica del code-behind Startup.aspx.cs
Fate così: semplicemente sostituite il code-behind con il seguente:

 public partial class Startup : System.Web.UI.Page
 {
 private void SaveSilverlightDeploymentSettings(Literal litSettings)
 {
 NameValueCollection appSettings = ConfigurationManager.AppSettings;
 
 StringBuilder SB = new StringBuilder();
 SB.Append("<param name="InitParams" value="");
 
 int SettingCount = appSettings.Count;
 for (int Idex = 0; Idex < SettingCount; Idex++)
 {
 SB.Append(appSettings.GetKey(Idex));
 SB.Append("=");
 SB.Append(appSettings[Idex]);
 SB.Append(",");
 }
 SB.Remove(SB.Length - 1, 1);
 SB.Append("" />");
 
 litSettings.Text = SB.ToString();
 }
 
 
 protected void Page_Load(object sender, EventArgs e)
 {
 Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
 SaveSilverlightDeploymentSettings(this.ParamInitParams);
 }

 

Non scendo nel dettaglio per mancanza di competenza! 🙂 Nell’evento Load della Page viene eseguito il metodo privato SaveSilverlightDeploymentSettings, al quale viene passato il controllo ParamInitParams, che è il controllo Literal definito allo step 2c.

3) Accesso del web.config dall’applicazione Silverlight
Tranquilli, siamo arrivati alla fine. Dopo tutto questo giro, possiamo tranquillamente andare a gestire l’evento Startup dell’applicazione Silverlight, all’interno del file App.xaml.cs. Esso può essere una cosa simile a questa:

private void Application_Startup(object sender, StartupEventArgs e)
{
 IDictionary<string, string> webConfigSettings = e.InitParams;
 string language = webConfigSettings["Language"];
 this.RootVisual = new MainPage();
}

 

La classe StartupEventArgs espone la proprietà InitParams, che non facciamo altro che andare a leggere per impostare un Dictionary di sole stringhe. Ovviamente il Dictionary come l’ho definito qui sopra ha poco senso, perchè esce immediatemente dallo scope: è sufficiente avere una classe di impostazioni singleton, statica, o qualsiasi altra soluzione, in modo tale che l’applicazione possa accedere ai settings definiti nel web.config ovunque ci sia bisogno.

Essendo un Dictionary, è sufficiente scrivere webConfigSettings[“Language”] per accedere al suo valore, così come è stato definito allo step (1).

Direi che è un giro un po’ lungo da mettere in piedi la prima volta, ma una volta preparato il tutto, alla fine viene tutto gratis. Va da sè infatti che se vado successivamente nel web.config ad aggiungere altri parametri, questi “arrivano” all’applicazione Silverlight senza toccare più nulla.

Send to Kindle

Igor Damiani

La sua passione per l'informatica nasce nella prima metà degli anni '80, quando suo padre acquistò un Texas Instruments TI-99. Da allora ha continuato a seguire l'evoluzione sia hardware che software avvenuta nel corso degli anni. E' un utente, un videogiocatore ed uno sviluppatore software a tempo pieno. Igor ha lavorato e lavora anche oggi con le più moderne tecnologie Microsoft per lo sviluppo di applicazioni: .NET Framework, XAML, Universal Windows Platform, su diverse piattaforme, tra cui spiccano Windows 10 piattaforme mobile. Numerose sono le app che Igor ha creato e pubblicato sul marketplace sotto il nome VivendoByte, suo personale marchio di fabbrica. Adora mantenere i contatti attraverso Twitter e soprattutto attraverso gli eventi delle community .NET.

Un pensiero su “Leggere i settings contenuti nel web.config da un’applicazione Silverlight 4

  • Google uses a huge number of almhirtogs in order to help it determine which websites should be displayed when keywords and searches are entered into their query database. They also use these almhirtogs to help ascertain which pages offer the greatest benefit and, therefore, which should appear near the top of the search results and which should be effectively buried down at the bottom.. . Updating the almhirtogs typically means that Google has implemented a change to their calculations. Many updates are made throughout the year and the majority go largely unnoticed, but every now and again a big change occurs that has the webmaster world all of a tither. One of the most recent updates, which was dubbed the Farmer update by marketers and website owners, but called the Panda update by Google is one such change.. When it first struck the US search results, analysts predicted that it affected a not insignificant 12% of all search results and that some sites had lost as much as 50% or more of their organic search traffic from the Google search results pages.. . Pages that have suffered have included those with duplicate content as well as whole websites that include a number of pages with unoriginal content. Pages with a lot of inappropriate advertisements and irrelevant keyword targeting have also suffered at the hands of the Panda update and the question of quality content and duplicate contents has arisen once again as a result.. . The key to surviving the Panda update is to ensure that your website is filled with high quality and original content. Either write the content or yourself or use a professional SEO or marketing service in order to compile high quality content.. . Remove unnecessary ads, especially those that are not entirely relevant to the content that you offer. Also consider removing outgoing links if they point to irrelevant pages and if you have a lot of these, because these may be mistaken as being ads rather than useful links.. . Generally speaking, Google aims to provide good quality links to its users and the Panda update is the latest attempt to improve their already burgeoning results pages. If you?ve been hit then it is possible to recover your traffic levels but it may take some time.

    Rispondi

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.