Model View Controller: slide e demo disponibili per il download

datemercoledì 16 dicembre 2009 alle 21.12  - posted by Manuel Scapolan in ASP.NET | Castle Project | Patterns And Principles | Eventi

Per chi fosse interessato sono disponibili per il download le slide e la demo dell'evento di giovedì scorso organizzato da 1nn0va sul Model View Controller. Nella demo i progetti di esempio con il confronto tra WebForms, ASP.NET MVC e MonoRail.

Per scaricare i file cliccare sui link qui sotto:

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

datevenerdì 6 novembre 2009 alle 21.48  - posted by Manuel Scapolan in Castle Project

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:

<table border="0" cellspacing="0">
   #foreach($item in $items)
      #if($velocityCount == 1)
      <tr class="first">
         <td>I'm the first row!</td>
      </tr>
      #elseif($velocityCount == $items.Count)
      <tr class="last">
         <td>I'm the last row!</td>
      </tr>
      #else
      <tr>
         <td> </td>
      </tr>
      #end
   #end
</table>

Fonte: Just in ram

Impostare la pagina di default con MonoRail Routing HttpModule

datevenerdì 30 ottobre 2009 alle 21.30  - posted by Manuel Scapolan in Castle Project

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:

<httpModules>
 <!-- il modulo di routing deve precedere quello di monorail -->
 <add name="routing" type="Castle.MonoRail.Framework.RoutingModule,
    Castle.MonoRail.Framework" />
 <add name="monorail" type="Castle...EngineContextModule,
    Castle.MonoRail.Framework"/>
</httpModules>

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

<monorail useWindsorIntegration="true">
   <viewEngine viewPathRoot="Views" 
      customEngine="Castle.MonoRail...NVelocity.NVelocityViewEngine, 
      Castle.MonoRail.Framework.Views.NVelocity"/>
   <routing>
      <rule>
         <pattern>(\b/\w+)/?Default.aspx$</pattern>
         <replace><![CDATA[ $1/default.rails ]]></replace>
      </rule>
      <rule>
         <pattern>(/Default.aspx)</pattern>
         <replace><![CDATA[ /home/default.rails ]]></replace>
      </rule>
   </routing>
</monorail>

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.

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

datevenerdì 23 ottobre 2009 alle 23.25  - posted by Manuel Scapolan in Castle Project

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.

<components>
 <component id="pizza-shop"
        service="Windsor.Sample.IShop, Windsor.Sample"
        type="Windsor.Sample.PizzaShop, Windsor.Sample">
    <parameters>
       <builders>
        <dictionary>
           <item key="margherita">${margherita-pizzabuilder}</item>
           <item key="veggie">${veggie-pizzabuilder}</item>
        </dictionary>
       </builders>
    </parameters>
 </component>
 <component id="margherita-pizzabuilder"
        service="Windsor.Sample.IPizzaBuilder, Windsor.Sample"
        type="Windsor.Sample.MargheritaPizzaBuilder, Windsor.Sample">
 </component>
 <component id="veggie-pizzabuilder"
        service="Windsor.Sample.IPizzaBuilder, Windsor.Sample"
        type="Windsor.Sample.VeggiePizzaBuilder, Windsor.Sample">
 </component>
</components>

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

public class PizzaShop : IShop
{
   private readonly Dictionary<string, IPizzaBuilder> _builders;
 
   public PizzaShop(Dictionary<string, IPizzaBuilder> builders)
   {
      this._builders = builders;
   }
}

tagsTags:

About me

manuel scapolanSono un consulente informatico. Nel 2004 terminati gli studi in Ingegneria Informatica (1° livello), ho iniziato come freelance collaborando con una ditta di consulenza informatica ed una agenzia di marketing e comunicazione nello sviluppo di applicazioni web. Attualmente divido il lavoro di sviluppatore e progettista web con attività di formazione nel settore della programmazione.
View Manuel Scapolan's profile on LinkedIn

Follow me on Follow manuelscapolan on Twitter

Calendario


<<  agosto 2010  >>
lumamegivesado
2627282930311
2345678
9101112131415
16171819202122
23242526272829
303112345

Disclaimer

Eccetto dove diversamente specificato, i contenuti di questo sito sono rilasciati mediante:
creative commons
Attribuzione: Non commerciale
Condividi allo stesso modo. R.2.5

Books (a bit more about my library)

Domain Driven Design - Eric Evans Applying Domain-Driven Design and Patterns - Jimmy Nilsson Refactoring to Patterns - Joshua Kerievsky Design Patterns -  Erich Gamma, Richard Helm, Ralph Johnson, John M. Vlissides Code Complete Second Edition - Steve McConnell Patterns of Enterprise Application Architecture - Martin Fowler Agile Principles, Patterns, and Practices in C# - Robert C. Martin xUnit Test Patterns - Gerard Meszaros Refactoring - Martin Fowler CLR via C# Second Edition - Jeffrey Richter Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries - Krzysztof Cwalina, Brad Abrams Don't make me think! - Steve Krug Bulletproof Ajax - Jeremy Keith

Manuel Scapolan Copyright © 2007 - 2010 - Tutti i diritti riservati - Powered by BlogEngine.NET 1.5.0.7 - silk icons by famfamfam - Time CET