Posts by category: Castle Project

by in / ASP.NET / Castle Project
No peoples think this is good

Mappare MonoRail su ASP.NET MVC 2.0

Nel mio viaggio da MonoRail ad ASP.NET MVC 2.0 mi è capitato di dover gestire una serie di link esterni che richiamavano pagine del sito sui quali non avevo controllo e che ovviamente utilizzavano l’estensione “.rails” tipica di MonoRail. Visto che i nomi di controller ed action erano rimasti comunque invariati ho pensato di utilizzare il sistema di routing di ASP.NET.

Una delle caratteristiche più interessanti del routing di ASP.NET è la possibilità di specificare dei constraint nella registrazione di una route attraverso implementazione di IRouteConstraint. Il ruolo del constraint è quello di definire la validità della regola per la richiesta corrente. Il primo passo da compiere sarà quindi quello di definire un constraint che ci permetta di escludere dai nostri routing le richieste con estensione “.rails”. Qui sotto possiamo vedere nel dettaglio il codice:

Nel metodo di registrazione delle regole di routing nel Global.asax aggiungiamo alle regola già configurate la constraint per le action che contengono la stringa “.rails” e definiamo una nuova regola che invece le consideri. Qui sotto possiamo vedere un esempio di configurazione, attenzione però che se abbiamo ulteriori regole dobbiamo valutare di volta in volta se aggiungere il constraint in base al fatto che queste regole eseguano il match con le chiamate alle pagine di MonoRail.

/ Read Article /
by in / Castle Project
No peoples think this is good

Monorail & NVelocity: primo e ultimo elemento di un ciclo foreach

Può capitare alle volte di voler distinguere l’output di un foreach per il primo oppure l’ultimo elemento del ciclo, per fare questo in MonoRail il view engine NVelocity ci mette a disposizione la variabile $velocityCount che possiamo utilizzare nel seguente modo:

Fonte: Just in ram

/ Read Article /
by in / Castle Project
No peoples think this is good

Impostare la pagina di default con MonoRail Routing HttpModule

Oggi ho avuto l’occasione di utilizzare il Routing di MonoRail per risolvere un problema da tempo in sospeso, ovvero chiamare l’action di default quando nell’indirizzo viene specificato solo il nome del controller. Ad esempio se digitiamo mysite.com/admin MonoRail deve essere in grado di richiamare mysite.com/admin/default.rails.
La prima cosa da fare è creare nella root del sito la cartella admin con all’interno una pagina Default.aspx senza code-behind. In questo modo ASP.NET riscriverà la chiamata a mysite.com/admin con l’indirizzo mysite.com/admin/Default.aspx. In secondo luogo dobbiamo registrare nel web.config l’HttpModule di Routing:

A questo punto possiamo dichiarare delle regole di routing specificando con le regular expression quali indirizzi considerare e come eseguirne la riscrittura:

Nell’esempio sono state registrare due regole, nella prima vengono considerati tutti gli indirizzi che iniziano con il carattere / seguito da almeno un carattere alfanumerico e che terminano con un carattere / e la stringa Default.aspx, questi indirizzi vengono riscritti prendendo la parte prima del Default.aspx aggiungendovi /default.rails. La seconda regola invece ci permette di intercettare le chiamate alla pagina Default.aspx che si trova nella root del sito e che con la logica della prima regola porterebbe ad un controller vuoto e di conseguenza ad una bella eccezione. In questo caso l’indirizzo viene sostituito con /home/default.rails.

Nota: Per utilizzare questa tecnica è necessario creare una Default.aspx con relativa cartella per ogni controller dell’applicazione o meglio per i controller che necessitano di una pagina di default.

/ Read Article /
by in / Castle Project
No peoples think this is good

Fare il mapping di un Dictionary nella configurazione xml di Castle Windsor

Ecco come configurare in Castle Windsor un parametro di tipo Dictionary dove il valore associato alla chiave è un oggetto e non una semplice stringa. Nell’esempio seguente la classe PizzaShop riceve nel costruttore un parametro builders di tipo dictionary avente come chiave il tipo di pizza e come valore l’istanza della classe specializzata nella preparazione di quel tipo di pizza.

Ed ecco come è fatta nello specifico la classe PizzaShop dell’esempio:

/ Read Article /