asp.net mvc 6 - uno sguardo al futuro
TRANSCRIPT
Andrea Dottor
Consulente e sviluppatore
Microsoft MVP ASP.NET/IIS
ASP.NET MVC 6
uno sguardo al futuro
ASP.NET Web Form
ASP.NET MVC 5
.NET Framework 4.5.2
Quale scegliere per un nuovo progetto?
Come evolvere un progetto esistente?
Oggi
Familiar .NET Framework APIs
Ecosystem of existing packages
Installed machine-wide
Updated with the OS
ASP.NET 5 full (.NET Framework 4.6)
.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
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
File di progetto in JSON project.json
Configurazione in JSON config.json
Packages esterni in JSON package.json
Cartella wwwroot contiene i file staticidel progetto
Integrazione con i più usati Web Development Tools (Bower, Grunt and Gulp)
Nuova struttura di progetto
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
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
#if ASPNET50
return heroes.FirstOrDefault(h => h.Id == id);
#elif ASPNETCORE50
foreach (var item in heroes)
{
if (item.Id == id)
return item;
}
return null;
#endif
Compilazione condizionale
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
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
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>
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
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
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
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")
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
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
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?
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?
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?
http://weblogs.asp.net/scottgu/introducing-asp-net-5
http://www.asp.net/vnext/overview/aspnet-vnext/aspnet-5-overview
http://blogs.msdn.com/b/dotnet/archive/2014/12/04/introducing-net-
core.aspx
http://blogs.msdn.com/b/cesardelatorre/archive/2014/11/18/what-is-net-
core-5-and-asp-net-5-within-net-2015-preview.aspx
http://blogs.msdn.com/b/bethmassi/archive/2015/02/25/understanding-
net-2015.aspx
http://blogs.msdn.com/b/webdev/archive/2014/06/17/dependency-
injection-in-asp-net-vnext.aspx
http://blogs.msdn.com/b/webdev/archive/2015/02/23/aspnet-5-
updates-for-feb-2015.aspx
http://forums.asp.net/1255.aspx/1?ASP+NET+5+Preview+
…
Links
feedback
10
• Materiale: – http://blog.dottor.net/files/xedotnet/20150313_Dottor.
MVC6_code.zip
– http://blog.dottor.net/files/xedotnet/20150313_Dottor.
MVC6_slide.zip
Email: [email protected]
Website: http://www.dottor.net
Blog: http://blog.dottor.net
Twitter: http://twitter.com/dottor
Contatti