Prepariamoci al cambiamento. ASP.NET MVC e ASP.NET Web API saranno unificati in un unico framework chiamato ASP.NET MVC 6, e questo è solo la prima di una serie di novità che stanno per arrivare.
Tutto si semplifica. Le performance migliorano. Un altro salto tecnologico in avanti portato da ASP.NET 5.
In questa sessione, infatti, vedremo tutte le novità che ASP.NET MVC 6 porta con se, e cercheremo di andare in dettaglio in modo da capire cosa voglia dire realizzare (da zero) o migrare (un'applicazione essitente) a questa nuova versione
7. Familiar .NET Framework APIs
Ecosystem of existing packages
Installed machine-wide
Updated with the OS
ASP.NET 5 full (.NET Framework 4.6)
8. .NET Core CLR runtime
Optimized for server/cloud
Small footprint
Class libraries in NuGet packages
Side-by-side & portable
Cross-platform: Windows, Linux, Mac
ASP.NET 5 core
9. Unified programming model
Unione di MVC, Web API e Web Pages in un’unica
tecnologia
Eliminazione codice duplicato dal framework
New HTTP request pipeline
Cloud Ready configuration
Depencency Injection
Fast HTTP performance
…
No Visual Basic.NET (almeno per ora)
ASP.NET MVC 6
10. File di progetto in JSON
project.json
Configurazione in JSON
config.json
Packages esterni in JSON
package.json
Cartella wwwroot contiene i file statici
del progetto
Integrazione con i più usati Web
Development Tools (Bower, Grunt and
Gulp)
Nuova struttura di progetto
11. Modulare
Siamo noi a decidere cosa aggiungere
Eliminata dipendenza da System.Web
Ogni richiesta con System.Web occupava circa 30K,
mentre ora 2K
System.Web pesa
Darivata dall’esperienza del progetto
Katana project
Supporta OWIN
New HTTP request pipeline
12. Non è più necessario “forzare” a mano
una compilazione
Ad ogni salvataggio/modifica del codice,
l’applicativo viene subito ricompilato
Facilita l’uso di altri editor per lo sviluppo di
applicazioni ASP.NET
Offre un’esperienza simile a quella offerta dall’uso di
linguaggi interpretati
Roslyn compiler
15. Addio al “vecchio” web.config
File di configurazione semplificato
Solo la configurazione realmente utile
all’applicazione
Cross-platform
Integrato con la configurazione di Azure
Cloud-ready configuration
16. Configurazione. Il formato lo decidiamo noi
config.json
{
"ConnectionStrings": {
"JsonConnectionString": "json connection string"
}
}
config.xml
<config>
<ConnectionStrings>
<XmlConnectionString>xml connection string</XmlConnectionString>
</ConnectionStrings>
</config>
config.ini
[ConnectionStrings]
IniConnectionString = ini connection string
17. Estende/arricchisce i tag HTML con
attributi che vegono eseguiti server-side
In alcuni casi facilitano la scrittura del
markup
Tag helpers
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(m => m.UserName, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.TextBoxFor(m => m.UserName, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.UserName, "", new { @class = "text-danger" })
</div>
</div>
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="UserName" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="UserName" class="form-control" />
<span asp-validation-for="UserName" class="text-danger"></span>
</div>
</div>
19. DI implementato out of the box.
BYOC (Bring Your Own Container)
Autofac, Ninject, Unity, Windsor, …
Gestisce vari tipi di Lifestyle
Instance
Una nuova istanza viene creta ogni volta. Siamo noi a
specificare come creare l’istanza (parametri nel costruttore).
Transient
Una nuova istanza viene creta ogni volta
Singleton
Viene creta una singola istanza, e viene ritornata sempre
quella
Scoped
Viene creta un’istanza per ogni richiesta.
Dependency Injection
20. Tramite injection nel costruttore
Viene in automatico risolto il tipo richiesto
Tramite proprietà decorata con
l’attributo [Activate]
Utile quando non possiamo modificare il costruttore
Dependency Injection
21. Le funzionalità che erano presenti nella
dll System.Web ora sono state
implementate come packages nuget
separati
Esempio la Cache
https://github.com/aspnet/Caching
Esempio la Session
https://github.com/aspnet/Session
Cache, Session
23. Simili alle PartialView
Ma molto meglio.
Composti da
Una classe di “code-behind” simile ad un mini
controller
La classe eredita da ViewComponent e si deve
implementare il metodo Invoke
Una view che ne definisce la visualizzazione
Possibilità di esserre invocate in async
View components
@Component.Invoke("TagList")
24. Possibilità di iniettare una classe
all’interno delle View per poterne
richiamare i metodi
Dichiarare il servizio in fase di Startup
services.AddTransient<TodoList.Services.StatisticsService>();
Dichiarare la classe
@inject TodoList.Services.StatisticsService Statistics
Usarla richiamandone i metodi
@await Statistics.GetCount()
Injecting a service
25. Con codice sorgente
Viene copiato il codice sorgente dell’applicazione
Con precompilazione
Il codice dell’applicazione viene compilato e risulta
nella cartella di output come packages
Pubblicazione
27. Applicazioni ASP.NET WebForm
potranno girare solamente nel .NET Framework 4.6
non potranno essere portate ad ASP.NET 5
non potranno girare con il .NET Core.
E le applicazioni esistenti?
28. Applicazione esistenti ASP.NET MVC
possono essere eseguite senza modifiche sul .NET
Framework 4.6.
migrare ad ASP.NET 5/MVC 6 comporta la riscrittura
La difficolta dipende da quanto l’applicazione è legata a
System.web e dalle API utilizzate
E le applicazioni esistenti?
29. API Portability Analyzer
Tool che analizza la API utilizzate dall’applicazione, e
permette di fare una prima analisi
http://www.microsoft.com/en-us/download/details.aspx?id=42678
E’ disponibile un’estensione per Visual Studio che
genera il report
https://visualstudiogallery.msdn.microsoft.com/1177943e-cfb7-4822-a8a6-e56c7905292b
E le applicazioni esistenti?