Protože session o MVC6 na Microsoft MVP Summitu není pod NDA, vystavuji rovnou svoje neformální „raw“ zápisky.
Základní info
MVC6 = MVC + WebAPI + Web Pages (unifikace do jednoho společného API)
Build on ASP.NET 5
- poběží na .NET core s jeho podporou side-by-side verzování
- cross-platform
- IIS/self-hosted
nativní Dependency Injection
- unified abstraction
plně Async
command-line scaffolding
Enhanced Razor
- @inject, @using, @inherits
- async views
- flush pointes
- tag helpers
Get Started
project.json
přidat do sekce dependencies
- „Microsoft.AspNet.Mvc“: „6.0.0-beta1“
Startup.cs
Configure(IApplicationBuilder app) – app.UseMvc(routes => routes.MapRoute(…))
ConfigureServices(IServiceCollection services)
services.AddMvc()
services.Configure<MvcOptions>(options => …)
- options.Filters
- options.InputFormatters
- options.ModelViewBinders
- options.OutputFormatters
- options.ValueProviderFactories
- …
Routes
- default routes, constratints: „{area:exists}/{controller=HomeControler}/{action=Index}/{id?int?}“
- all routes fall through to next route, if the action is not found
- attribute routing enabled by default [Route], [HttpXxx], concat route pro controller a action, inherited
- route tokes [controller], [action], …
Samples
- součástí MVC6 source code na GitHub
- https://github.com/aspnet/Mvc/tree/dev/samples
Areas
[Area] atribut na controlleru, nemusí být ve složce Area
stává se pouze informací pro routing, kde se to musí potkat s {area}
Model binding, formatting
[FromBody[ – formatters
[FromQuery], [FromRoute], [FromForm], [FromHeader] – restrikce
[Produces] na action – restrikce media types výstupu
WebAPI
shim-package pro podporu legacy WebAPI projektů (např. konvence pojmenování action–method, atp.)
View Components !!
partial view s controller action
vrací View nebo formatted data
Async, DI
Dependency Injection
POCO controller bez dědění Controller třídy
[Activate] atribut k property-based injection, např [Activate] public ActionContext ActionContext
service filters: [ServiceFilter(typeof(MyFilter)]
type filters: [TypeFilter(typeof(MyFilter)]
Application Model, conventions
described through ActionDescriptorCollection
tweak conventions (ála EF)
- IApplicationModelConvention
- IControllerModelConvention
- …