Upload
chaowlert-chaisrichalermpol
View
888
Download
2
Embed Size (px)
Citation preview
DevRock #01 Hello New Year 2015
ASP.NET 5
Chaowlert Chaisrichalermpol
Developer @ Jetabroad
DevRock #01 Hello New Year 2015
JETABOARD
PRODUCTION
DevRock #01 Hello New Year 2015
LEARN
DevRock #01 Hello New Year 2015
ASP.NET 5 NEW PLATFORM
Unified MVC and WebAPI
New runtime, no more System.Web, or IIS, or Windows!
New project structure
New HTTP pipeline
New package management
Common IoC, and log interface + built-in IoC
New configuration & Options
New view features
New front-end workflow
DevRock #01 Hello New Year 2015
OVERVIEW
DevRock #01 Hello New Year 2015
LIBRARIES
.Net full .Net Core
WebForm 4.6 -
MVC 5MVC 6 (unified with WebAPI)
WebAPI 2
EF 6 EF 7 + support for non-relational
SignalR 2 SignalR 3
DevRock #01 Hello New Year 2015
ASP.NET 5 MODULAR
MVC
Caching
Config
DataProtect
DI
FileLogging
Options
Razor
Routing
See more at https://github.com/aspnet/Home/wiki/Repo-List
DevRock #01 Hello New Year 2015
ARCHITECTURE
New project type
Support new Core CLR
Self hosted
DevRock #01 Hello New Year 2015
CORE CLR
DevRock #01 Hello New Year 2015
CLR CORE CLR
CLR Core CLR
Install per machine Install per application
1 major version for all applications Run different version side by side
Runtime 200 MB Runtime 11 MB (Only what you need)
Host on Windows Host anywhere
Normal performance Fast startup
Lower memory usage (-35%)*
More request per seconds
Full backward compatibility Some backward compatibility
* http://james.newtonking.com/archive/2014/10/24/json-net-6-0-release-6-asp-net-coreclr-support-
memory-usage-optimizations
DevRock #01 Hello New Year 2015
PROJECT STRUCTURE
DevRock #01 Hello New Year 2015
PROJECT STUCTURE
No more global.asax & web.config
global.json
Startup.cs
wwwroot
project.json
Files in project always include by default
DevRock #01 Hello New Year 2015
HTTP PIPELINE
DevRock #01 Hello New Year 2015
HTTP PIPELINE
Lean & fast
app.Run()
app.Use…
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerfactory){
app.UseErrorHandler("/Home/Error");app.UseStaticFiles();app.UseIdentity();app.UseMvc(routes => ...)
}
DevRock #01 Hello New Year 2015
CUSTOM
public class SampleMiddleware {private readonly RequestDelegate next;public SampleMiddleware(RequestDelegate next) {
this.next = next;}public async Task Invoke(HttpContext context) {
await this.next.Invoke(context);}
}
app.UseMiddleware<SampleMiddleware>();
DevRock #01 Hello New Year 2015
MVC
public void ConfigureServices(IServiceCollection services){
service.AddMvc();}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerfactory){
app.UseMvc(routes => ...)}
DevRock #01 Hello New Year 2015
PACKAGEMANAGEMENT
DevRock #01 Hello New Year 2015
PACKAGE MANAGEMENT
Manage packages in project.json
No more Assembly references
Reference by NuGet
kpm
Packages are cached
DevRock #01 Hello New Year 2015
LOG & IOC
DevRock #01 Hello New Year 2015
LOG IOC
ILogger
Console
NLog
Serilog
Custom
IServiceProvider
Built-in
Autofac
Ninject
StructureMap
Unity
Windsor
Custom
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerfactory){
loggerfactory.AddNLog(new NLog.LogFactory());}
public IServiceProvider ConfigureServices(IServiceCollection services){
...var builder = new ContainerBuilder();builder.Populate(services);return builder.Build().Resolve<IServiceProvider>();
}
DevRock #01 Hello New Year 2015
IOC
services.AddSingleton
services.AddScoped
services.AddTransient
services.AddInstance
public void ConfigureServices(IServiceCollection services){
services.AddScoped<ICalculator, Calculator>();}
DevRock #01 Hello New Year 2015
CONFIGURATION & OPTIONS
DevRock #01 Hello New Year 2015
CONFIGURATION
no more web.config
Config from multiple sources
Structure is hierarchy
Configuration source
config.AddJsonFile
config.AddXmlFile
config.AddIniFile
config.AddEnvironmentVariable
config.AddCommandLine
Get config value
config.Get
IConfiguration config = new Configuration().AddJsonFile("config.json").AddEnvironmentVariable();
config.Get("path1:path2");
DevRock #01 Hello New Year 2015
OPTIONS
Read from config is old school
Inject config as POCO
service.Configure<T>
IOptions<T>
public void ConfigureServices(IServiceCollection services){
services.AddOptions();services.Configure<MyAppOptions>(Config.GetSubKey("MyApp"));
}
DevRock #01 Hello New Year 2015
NEW
VIEW FEATURES
DevRock #01 Hello New Year 2015
VIEWCOMPONENT
Next step of PartialView
Behave like Controller
Razor views are located in
/Views/{controller}/Components/{component}/{view_name}.cshtml
/Views/Shared/Components/{component}/{view_name}.cshtml
public class MyViewComponent : ViewComponent {public IViewComponentResult Invoke(param...) {
return View();}
}
DevRock #01 Hello New Year 2015
VIEW INJECTION
@{ViewBag.Title = "Home Page";
}
<div>Value is @calc.Add(1, 1)</div>
@inject ICalculator calc
DevRock #01 Hello New Year 2015
TAGHELPERS
@HTML.Label("FirstName", "First Name:", new { @class = "caption" }) is unreadable
<label class="caption" for="FirstName">First Name:</label>is better
public class DateTimePickerTagHelper : TagHelper {public override void Process(TagHelperContext context, TagHelperOutput output) {}
}
@addtaghelper "Assembly.Name"
<datetimepicker id="myDate" value="@Model.StartDate"></datetimepicker>
DevRock #01 Hello New Year 2015
FRON-END FRAMEWORK
DevRock #01 Hello New Year 2015
BOWER
No more js library from NuGet
20,000+ packages
No more js collision
You decide what should include in project
DevRock #01 Hello New Year 2015
GRUNT & GULP
No more ASP.net bundle
4,000+ tasks
Bind with Visual Studio
Before Build
After Build
Clean
Open
DevRock #01 Hello New Year 2015
Q A