SlideShare a Scribd company logo
ASP.Net Core
V1.0
大綱
• Framework的差異
• .Net Core指令與範本
• 檔案結構分析
• .Net Core基本概念
• ASP.Net MVC 6
• 資料存取: EFCore
• 測試
Framework在ASP.Net Core
• .Net Core的Framework支援:
• .Net Core v1.0
• .Net Framework 4.5 up
• .Net Core的專案可自行決定要使用的Framework版本,一般來說,官
方的名詞對映為:
• .Net core v1.0 -> core版本的Framework
• .Net Framework -> Full .Net Framework
兩種Framework的差異
• .Net Core:
• 跨平台(作業系統平台,不是.Net跨Java之類的)
• 更快更簡便
• 微軟暗示的未來發展項目
• Full .Net Framework:
• 完整版的.Net Framework,最高可支援到最新的.Net Framework 4.6.2,並且
與舊版一致
• 需額外在執行應用程式的作業系統上安裝.Net Framework
• 微軟明示的未來不發展項目
.Net Core
• 目前支援的平台:
• Windows
• Mac OSX
• Linux
• 未來會支援FreeBSD和Alpine
• .Net Core在設計上採用微核心的概念;除了最核心的功能之外,其它
都被包裝成為Nuget Package
• 其操作模式類似NodeJs,對於已有學習過NodeJs的開發者,有著極高
親和性
• 藉由.Net Native技術將效能提升至原生碼(Native)境界
這兩個Framework的當前狀況
• .Net Core
• 主要發展項目
• 為跨平台做準備,天生就具備跨平台,只需要在執行環境安裝.Net Core;而開
發人員則是要在自己環境安裝.Net Core SDK
• Full .Net Framework
• 舊版.Net Framework,套件和生態系最豐富
• 需要藉由Mono才能運作在Unix-Like的環境
.Net Core的指令
指令 說明
dotnet new 產生新的基本.Net專案內容(僅包含: project.json, Program.cs和Nuget.config)
dotnet restore 還原專案所使用的Nuget套件
dotnet build 建構專案
dotnet publish 產生可發行.Net專案(包含所屬的Runtime)
dotnet run 編譯與立即執行.Net專案(較適用於exe型專案)
dotnet repl 啟動互動式模式
dotnet pack 將專案的產出封裝成Nuget套件
範本
• .Net core為了能夠讓非Visual Studio開發人員能夠輕鬆的開發,提供
了官方與非官方兩種範本建構模式:
• dotnet new –t [範本型式]
• Yeoman(aspnet)
Yeoman aspnet的sub-command
• 在非Visual Studio的開發環境下,若要每個應用程式的程式碼都要
自行從空白檔案逐一建構,這將大幅降低生產力
• 為解決此一問題,可使用Yeoman aspnet套件中題供的子命令來解
決;子命令的格式為:
yo aspnet:[子指令] [檔案名稱]
(範例: 創建ASP.Net MVC的WebAPI Controller檔案)
yo aspnet:WebApiController ImageApiController
• 更多指令可參考其官方Github
.Net Core專案結構分析
方案描述檔,可指定編譯位置
專案中放置靜態檔案位置,Http Request的起始路徑
組態資料放置的檔案
專案核心檔案,所有操作和控制都在這個檔案
應用程式啟始進入點
global.json
• 在projects屬性中,可以指定編
譯時,要對那些路徑進行操作,
可以指定一個完整路徑
• Sdk說明的是當前方案是使用
那個版本的Visual Studio範本工
具
wwwroot
• Web專案路徑是整個專案的路
徑,但是實際上應用程式在執行
時,Http Request預設會從
wwwroot中存取資源
• 所有靜態資源檔案都應該要放
置在這個資料夾中
appsettings.json
• 應用程式所需要的組態資料都
寫在這個檔案中
• 此檔案為json,它允許巢狀的結
構
• 可使用Configuration物件存取
這個檔案
• 可在開發時期,將資料庫連線字
串寫在這個檔案中
Startup.cs
• 這裡是整個應用程式的進入點
• 可以在這邊啟動/組態所有應用
程式所有需要的元件
• 可以在這邊進行IoC的註冊
滄海遺珠: Program.cs
• 當以cmd啟動.Net Core應用程
式時,會以此檔案作為應用程式
進入點
• 組態底層應用程式執行時,所有
需要的控制的組態項目
滄海遺珠: launchSettings.json
• 指示IDE該如何啟動應用程式
• 控制執行環境:
• Development
• QA
• Product
• 可設定多組執行模式
• 可在Visual Studio的專案->屬性
中進行設定,也可以直接修改此
檔案(效果相同)
.Net Core基本概念
• 有幾個典範移轉的概念:
• 自行設計Http Request Handling flow
• 凡事皆Middleware(Http Request Pipeline)
• 與Full .Net Framework當前套件有大比例的不相容
• 什麼都要靠Nuget安裝套件和工具
• 開始習慣CommandLine
• 不同執行環境分的很清楚(Development, QA, Product)
• 萬物皆可注與被注入
• 新式的Configuration
• 提供Logger服務
• Session新解
Startup.cs會是你的好朋友
• 在Startup類別中的Configure方法中設計Http Request Handling flow:
1
2
3
• Http Request Handling flow的順序和
邏輯設計錯誤,這會導致應用程式非
預期執行
• 在flow中,每一個單元都是一個完整
的Middleware
凡事皆Middleware
• 每個Http Request被接收到之後,
會依照開發人員設計的Http
Request Handling flow進行處理
• Request/Response都會經過一
層層Middleware
• Middleware可以自行決定是否
要呼叫下一層,或是結束
不是每個套件都能用
• 當前有許多好用的套件仍未完
全移殖到.Net Core
• 目前絕大多數的熱門套件都已
經移殖了,但是.Net Core正式版
本與RC版本又不相容,套件作者
疲於奔命
(考驗套件作者的耐心)
Command Line萬歲
• .Net Core啟發(抄襲)自Node.Js,因此,它許多開發的模式都與Node.Js
有著高度的相似
• .Net Core可以僅靠指令就能進行許多CI流程所需要的操作:
• dotnet restore(套件還原)
• dotnet build(編譯專案)
• dotnet test(執行測試)
• dotnet publish or pack(發佈 or 打包)
多環境開發
• .Net Core在開發上特別針對不同執行環境有著友善的支援
• 開發人員僅需要調整launchSettings.json中的
ASPNETCORE_ENVIRONMENT
• 慣例上,只要在一些組態檔案的名稱動手腳就能夠套用在不同執行
環境上
(例: appsettings在開發環境下,名稱可以
是:appsettings.Development.json)
.Net Core提供基礎型IoC框架
• 可在Startup類別中的ConfigureServices方法中註冊
• .Net Core提供三種生命週期:
• Trasient
• Scope
• Singleton
• 預設採用建構子注入
• 會解決註冊物件之間的相依關係
Configuration
• 新式的Configuration為解決多環境的問題,提供了多組態來源以及
覆蓋機制
• 可使用Option pattern將物件所需要的組態值注入到物件建構子中
• 取巢狀的組態值時,可用格式: Configuration(“[第一層]:[第二層]”)
Logger
• 在.Net Core中,Logger是內建所提供的服務,並且可以注入到各個類
別中
• 只需要在Startup類別的Configure方法輸入參數指定,而後註冊
指明ILoggerFactory
Session
• Session與舊版最大的不同在於它的底層已經是抽換成Cache
(Session要和Cache一啟被啟用)
• 可以在Startup類別的ConfigureService方法中啟用Cache和Session
• 要注意Session的服務啟用一定要早於Mvc
• .Net Core提供的Session值存取非常陽春,主要是byte[]
(有提供擴充方法,但都是一些簡單型別)
(考量之處在於值是否可以被序列化)
ASP.Net MVC 6
• ASP.Net MVC 6僅能夠在.Net Core上執行
• ASP.Net MVC 6並沒有發生典範轉移
(誰知道MVC 7會不會! (╯-_-)╯ ~╩╩)
• MVC 6在開發上與MVC 5差異在於將一些套件進行優化,並且僅增
加一些東西:
Controller: POCO Controller, 合併MVC/WebAPI的父類別
View: ViewComponent, TagHelper, View Injection
Route Attribute: 路由字串範本
Controller的父類別
• 不論你使用的是MVC或是WebApi的Controller,它們都繼承同一個父
類別: Controller
• 藉由每個Action最後回傳的物件型別來區別是回傳MVC的View,還
是資料:
POCO Controller
• 可應用在WebAPI的Controller
• 查找Controller的預設方式:
• 本身是類別,且不是抽象類別
• 類別需為公開(Public)
• 類別後綴字: Controller或繼承Controller類別
• 該類別不能有[NonController]屬性標籤
TagHelper
• 開發人員可以自行設計Html標籤(element)及屬性(attribute)
• 具高可重用性(reusable)
• 僅需要在_ViewImports.cshtml檔案上添加:
Entity Framework Core
• 朝向輕量、可延展和跨平台發展
• 保留了EF中常用和慣用的頂層API
• 目標是就算在手機應用程式也能使用(舊版太肥無法用在手機)
• 尚未擁有的功能:
• Lazy Load(效能殺手,這個不支援也沒關係)
• Connection Resiliency(防閃斷,這個要快點支援)
• Complexity Type(DDD要這個)
• Spatial Type(空間資料會用到)
• Many-To-Many Relationship(竟然沒支援!?)
• Inheritance support is not complete(沒支援就會有很多阻抗匹配的問題)
• Seeding(竟然沒支援!?)
• GroupBy(報表GG了)
• …等
EFCore的In-Memory模式
• 為了讓整合測試更加順利,EFCore支援In-Memory模式;但這個模式
並非是完整的關聯式資料庫
單元測試
• .Net Core的單元測試環境框架目前僅支援三種:
• MSTest
• Nunit
• Xunit
• 只有是使用支援的環境框架才能夠使用dotnet test指令去執行
• 為了提示dotnet test測試環境況架,需額外在package.json中指定
testRunner的值
• 由於絕大多數的Mock框架都沒有支援.Net Core,因此,僅能選擇
Moq
整合測試
• 安裝套件
• 由於.Net Core可以使用WebHostBuilder來建構Web伺服器,可以利
用此點讓整合測試變得更加得簡便:
建構Web伺服器
總結與回顧
學習.Net
Core的關鍵:
Http Request
Handling flow
Middleware
開發
以指令驅動
的開發
IoC

More Related Content

PPTX
ASP.Net MVC Framework
PPTX
Entity Framework實戰
PPTX
ASP.Net WebAPI經驗分享
PPTX
Team Foundation Server
PPTX
Entity framework + Linq 介紹
PPTX
Redux+react js
PPTX
React js
PPTX
Asp.net mvc 6 新功能初探
ASP.Net MVC Framework
Entity Framework實戰
ASP.Net WebAPI經驗分享
Team Foundation Server
Entity framework + Linq 介紹
Redux+react js
React js
Asp.net mvc 6 新功能初探

What's hot (20)

PPTX
DEV305 - ASP.NET 5 開發攻略
PPTX
深入淺出Node.JS
PPTX
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
PPTX
Asp.net 5 新功能與變革
PPTX
Ch13 整合 Spring MVC/Security
PPTX
前端自動化工具
PPTX
[Study4TW Visual Studio Everywhere] asp.net core 實務開發經驗分享
PPTX
Asp.net core v1.0
PPTX
PPTX
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
PPTX
DDD系統分析
PPTX
ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)
PPTX
Nuget介紹- 如何使用和建立自己的package
PPTX
ASP.NET MVC 6 新功能探索
PPTX
Full stack-development with node js
PDF
Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應
PPTX
Asp.net mvc 概觀介紹
PPTX
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練2
PPTX
宅學習 Firebase
PPTX
Frontend Devops at Cloudinsight
DEV305 - ASP.NET 5 開發攻略
深入淺出Node.JS
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
Asp.net 5 新功能與變革
Ch13 整合 Spring MVC/Security
前端自動化工具
[Study4TW Visual Studio Everywhere] asp.net core 實務開發經驗分享
Asp.net core v1.0
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
DDD系統分析
ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)
Nuget介紹- 如何使用和建立自己的package
ASP.NET MVC 6 新功能探索
Full stack-development with node js
Servlet & JSP 教學手冊第二版 - 第 3 章:請求與回應
Asp.net mvc 概觀介紹
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練2
宅學習 Firebase
Frontend Devops at Cloudinsight
Ad

Similar to Asp.net core v1.0 (20)

PDF
Nodejs & NAE
PDF
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
PPTX
How to ASP.NET MVC4
PDF
.NET 7 家族新成員: Microsoft Orleans v7
PPT
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
PDF
Ceph customize ap is for programmatic access with python
PDF
Eventmachine Websocket 實戰
PPT
Html5
PDF
DAE 新变化介绍
PDF
Meteor
PDF
基于Symfony框架下的快速企业级应用开发
PDF
美团前端架构简介
PDF
合久必分,分久必合
PPTX
以业务为中心的云自动化 V mware-v-realize-automation-7
PPTX
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
PPTX
Appserv setup
PPTX
使用 .NET Standard 開發跨平台應用程式
PPTX
Track2 -刘继伟--openstack in gamewave
PPT
Real time web实时信息流推送
PPT
Real-Time Web实时信息流推送
Nodejs & NAE
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
How to ASP.NET MVC4
.NET 7 家族新成員: Microsoft Orleans v7
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
Ceph customize ap is for programmatic access with python
Eventmachine Websocket 實戰
Html5
DAE 新变化介绍
Meteor
基于Symfony框架下的快速企业级应用开发
美团前端架构简介
合久必分,分久必合
以业务为中心的云自动化 V mware-v-realize-automation-7
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
Appserv setup
使用 .NET Standard 開發跨平台應用程式
Track2 -刘继伟--openstack in gamewave
Real time web实时信息流推送
Real-Time Web实时信息流推送
Ad

More from 國昭 張 (20)

PPTX
8th ddd taiwan study group bounded context integration
PPTX
Ddd(meetup 2) ddd with clean architecture
PPTX
20190126 ddd-meetup1
PPTX
事件風暴-設計衝刺
PPTX
事件風暴-領域建模
PPTX
單元測試
PPTX
Docker實務
PPTX
Scrum essential
PPTX
Docker進階探討
PPTX
Docker基礎
PPTX
DDD架構設計
PPTX
DDD引導
PPTX
前端測試
PPTX
架構設計-資料存取的選擇
PPTX
例外處理與單元測試
PPTX
SQL Server效能調校
PPTX
NoSQL-MongoDB介紹
PPTX
Linq初階
PPTX
Linq實戰
PPTX
C#版本3~5的新特性
8th ddd taiwan study group bounded context integration
Ddd(meetup 2) ddd with clean architecture
20190126 ddd-meetup1
事件風暴-設計衝刺
事件風暴-領域建模
單元測試
Docker實務
Scrum essential
Docker進階探討
Docker基礎
DDD架構設計
DDD引導
前端測試
架構設計-資料存取的選擇
例外處理與單元測試
SQL Server效能調校
NoSQL-MongoDB介紹
Linq初階
Linq實戰
C#版本3~5的新特性

Asp.net core v1.0