#ReConnect2015
ASP.NET 5: MVC 6 y EF 7
#ReConnect2015 // @azuges @MsCodersMadrid @MadPoint @madriddotnet
Organizan:
#ReConnect2015
Luis Ruiz Pavón
Software Developer
PlainConcepts
http://geeks.ms/blogs/lruiz
luisruizpavon
#ReConnect2015
Todo ha
cambiado.
Nada ha
cambiado.
#ReConnect2015
Ecosistema .NET
#ReConnect2015
ASP.NET 5
#ReConnect2015
#ReConnect2015
ASP.NET 5: Nuevo paradigma
• Pipeline limpio por defecto
• Añadimos lo que necesitamos: Middleware
• Inyección de dependencias integrada en el framework
• Personalizamos la configuración de los servicios
#ReConnect2015
Dot Net Version Manager – aka DNVM
• ¿Qué es DNVM?
• Es una herramienta que nos va a permitir gestionar las diferentes versiones
de los entornos de ejecución, versiones del Framework. Esta elección del
entorno a ejecutar puede hacerse a nivel de proceso, usuario o maquina.
• Se instala por defecto como un CMD o PS en %USERPROFILE%/.dnx de
usuario.
#ReConnect2015
Dot Net Execution Environment – aka DNX
• ¿Qué es DNX?
• El SDK y el runtime para desarrollar aplicaciones multiplataforma en
.NET.
• Diferentes versiones
• .NET Full Framework
• .NET Core
• OSS
• Runtime y librerías modulares
• Administrado por NUGET
• Linux y OSX
• Mono
• Linux y OSX
#ReConnect2015
Dot Net Utilities – aka DNU
• ¿Qué es DNU?
• “Dot Net Environment Utilities”
• Permite:
• Administrar los paquetes de Nuget , instalar, restaurar etc
• Empaquetar y publicar nuestra solución
• Instalar y mantener comandos globales ( mas adelante lo veremos )
• Listar dependencias
• Y mucho mas… --help!
#ReConnect2015
Demo time
#ReConnect2015
Configuración
• Sistema de configuración flexible
• Sensible al concepto de entorno.
• Archivos obligatorios y opcionales (.json, .ini, .xml)
• Colecciones en memoria.
• Argumentos de línea de comandos.
• Variables de entorno.
• User secret.
• Configurable como pipeline
• Si la misma clave aparece en varios orígenes, la última gana.
#ReConnect2015
Configuración
• Agrupar las configuraciones por grupos lógicos
• Clase POCO que representa el grupo
• Registrarla como servicio
// Configuration typed objects
services.AddOptions();
services.Configure<Settings>(Configuration.GetSection("Settings"));
Startup.cs
public class Settings
{
public string ExternalApiBaseUrl { get; set; }
public string SuperSecret { get; set; }
}
Settings.cs
{
"Settings": {
"ExternalApiBaseUrl": "https://example.com",
"SuperSecret": “No definirlo aquí!"
}
}
Appconfig.json
#ReConnect2015
https://www.humankode.com/security/how-a-bug-in-visual-studio-2015-exposed-my-source-code-on-github-
and-cost-me-6500-in-a-few-hours
#ReConnect2015
Demo time
#ReConnect2015
Novedades en vistas
• TagHelpers
• Modifican el ouput
• Custom TagHelpers
• Sin output
• ViewComponentes
• Reemplazan a las ChildActions (Html.Action)
• @inject y await en vistas razor
#ReConnect2015
TagHelpers
#ReConnect2015
Demo time
#ReConnect2015
Localización
• Pasa del web.config a un middleware especializado
• app.UseRequestLocalization();
• ¿De dónde?
1. El query string (?culture=es-ES&ui-culture=es-ES)
2. Una cookie (ASPNET_CULTURE)
3. De la cabecera Accept-Language
4. De la propiedad DefaultRequestCulture de la clase
RequestLocalizationOptions
5. De la cultura del hilo actual
#ReConnect2015
Localización
• A nivel de Framework (Microsoft.AspNet.Localization)
• IStringLocalizer y IStringLocalizerFactory
• services.AddLocalization();
• La implementación por defecto usa .resx
• En MVC 6
• IHtmlLocalizer y IViewLocalizer
services.AddMvc()
.AddViewLocalization(x => x.ResourcesPath = "")
.AddDataAnnotationsLocalization();
#ReConnect2015
Localización
• IViewLocationExpander
• Mecanismo para personalizar dónde se buscan las vistas
• LanguageViewLocationExpander
• Añadido por defecto al configurar localización de vistas en MVC
• Escenarios:
• Views/Controller/Action.[culture]
• Views/Controller/[culture]/Action
#ReConnect2015
Demo time
#ReConnect2015
Archivos estáticos
• Cambia la raiz de la aplicación
• Carpeta wwwroot
• Archivos estáticos no se sirven por defecto!
• app.UseStaticFiles();
#ReConnect2015
Ecosistema JavaScript
#ReConnect2015
Bower
• Gestor de paquetes para librerías de cliente.
• Gran aceptación en el mundo del desarrollo web
• Gran cantidad de librerías actualizadas.
#ReConnect2015
Gulp
• Reemplaza al Bundling de Mvc.
• Automatización de tareas de desarrollo y despliegue
• Análisis de código (linting) de javascript y css
• Transformaciones de javascript, css o imágenes
• Minimizado y concatenado de archivos
• Automatización de ejecución de test
• …
• Uso de herramientas multi-entorno y multi-plataforma
• Mismas tareas con diferentes editores
#ReConnect2015
Integración con Visual Studio
• Task Runner Explorer
• Ejecución de tareas de gulp y grunt en VS
• Bindings
• Dependencias de Bower y Npm
• Explorador de soluciones
• Restauración de paquetes al guarder (bower.json y package.json)
#ReConnect2015
Demo time
#ReConnect2015
Servidores
• Helios (in-process en IIS, ahora deprecado)
• WebListener (HTTP.SYS based, solo en Windows)
• Kestrel (basado en libuv, multiplataforma)
https://github.com/aspnet/benchmarks
#ReConnect2015
Consideraciones para producción
Kestrel a día de hoy se considera un servidor para desarrollo.
Deberíamos tener en cuenta los siguientes consejos:
• No expongas Kestrel directamente a internet, usa un servidor web que
delegue las peticiones a éste:
• En Windows usa HttpPlatformHandler - UseIISPlatformHandler()
• En Linux usar Nginx o Apache.
• Recuerda el principio de menor privilegio (don’t run as a root)
• Tú aplicación corre como un proceso que debe ser lanzado, monitorizado y
debería continuar corriendo.
#ReConnect2015
Entity Framework 7
• Se registra como servicio
• Los DbContext disponibles para inyección de dependencias.
• Diferentes proveedores
• InMemory
• Herramientas de línea de comandos
• Migraciones y actualizaciones de base de datos
#ReConnect2015
Entity Framework 7
• No disponible en la RC1
• Sproc mapping
• Lazy loading
• Complex/value types
• Update model from database
• Custom conventions
• Non-relation providers
• Entonces, ¿Cuándo usar EF7?
• Aplicaciones nuevas que no importen las limitaciones que hemos comentado antes y
donde no se requiere Full .NET
• No migrar aplicaciones con EF6 a menos que se quieran usar las nueva
caracterísiticas de EF7.
#ReConnect2015
Demo time
Q&A?
#ReConnect2015
Thank you!
#ReConnect2015

ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7