🚫 Ad Blocker Detected

Please disable your AD blocker to continue using this site. Ads help us keep the content free! please press keyboard F5 to refresh page after disabled AD blocker

請關閉廣告攔截器以繼續使用本網站。廣告有助於我們保證內容免費。謝謝! 關閉後請按 F5 刷新頁面

0%

Agenda

前言

產生Controller物件相關物件關係如下面UML圖

relationship_pic.PNG

透過ControllerFactory建立一個Controller控制器物件.而ControllerFactory依賴IControllerActivator物件產生Controller.

上面IControllerActivator可以透過建立使用我們的依賴注入容器來替換原本反射產生物件.

DependencyResolverMVC提供的一個可替換物注入點,今天我們會藉由他來我們實現注入MVC方式.

Aufofac依賴注入容器

在實現自己的DependencyResolver前先談談Autofac容器做甚麼用的?

Read more »

Agenda

前言

產生Controller物件相關物件關係如下面UML圖

relationship_pic.PNG

透過ControllerFactory建立一個Controller控制器物件.而ControllerFactory依賴IControllerActivator物件產生Controller.

上面IControllerActivator可以透過建立使用我們的依賴注入容器來替換原本反射產生物件.

DependencyResolverMVC提供的一個可替換物注入點,今天我們會藉由他來我們實現注入MVC方式.

Aufofac依賴注入容器

在實現自己的DependencyResolver前先談談Autofac容器做甚麼用的?

Read more »

Agenda

前言

UrlRoutingModule對於OnPostResolveRequestCache事件添加一個對於MVC很重要的動作,透過RouteCollection取得此次請求匹配RouteData物件.

利用此RouteData取得要使用的IHttpHandler來執行它.

1
RouteData routeData = RouteCollection.GetRouteData(context);

RouteCollection是全域路由註冊表.我們在一開始使用MapRoute註冊與之匹配ControllerAction

RouteCollection是基於RouteBase物件集合,所以它可以存放所有繼承RouteBase物件,RouteBase這個類別有一個重要的方法來取得RouteData,RouteData封裝此次Http請求的Controller,Action…等資訊

對於每個Http請求依序找尋第一個匹配路由規則

1
2
3
4
5
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Read more »

Agenda

前言

UrlRoutingModule對於OnPostResolveRequestCache事件添加一個對於MVC很重要的動作,透過RouteCollection取得此次請求匹配RouteData物件.

利用此RouteData取得要使用的IHttpHandler來執行它.

1
RouteData routeData = RouteCollection.GetRouteData(context);

RouteCollection是全域路由註冊表.我們在一開始使用MapRoute註冊與之匹配ControllerAction

RouteCollection是基於RouteBase物件集合,所以它可以存放所有繼承RouteBase物件,RouteBase這個類別有一個重要的方法來取得RouteData,RouteData封裝此次Http請求的Controller,Action…等資訊

對於每個Http請求依序找尋第一個匹配路由規則

1
2
3
4
5
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Read more »

Agenda

前言

上一篇說到最終會透過一個實現IView物件(Razor是透過RazorView)來完成,RenderView方法將BuildManagerCompiledView方法取得物件轉換型別成WebViewPage.

.cshtml最終會編譯成一個繼承WebViewPage檔案.

本篇會來解析View編譯原理

我有做一個可以針對於Asp.net MVC Debugger的專案,只要下中斷點就可輕易進入Asp.net MVC原始碼.

WebViewPage

WebViewPage繼承樹最頂層有個WebPageExecutingBase抽象類別,他擁有一個抽象方法Execute,View轉成c#程式會建立一個類別就會繼承於WebViewPage並把使用者頁面程式碼實現在Execute方法.

1
public abstract void Execute();
Read more »

Agenda

前言

上一篇說到最終會透過一個實現IView物件(Razor是透過RazorView)來完成,RenderView方法將BuildManagerCompiledView方法取得物件轉換型別成WebViewPage.

.cshtml最終會編譯成一個繼承WebViewPage檔案.

本篇會來解析View編譯原理

我有做一個可以針對於Asp.net MVC Debugger的專案,只要下中斷點就可輕易進入Asp.net MVC原始碼.

WebViewPage

WebViewPage繼承樹最頂層有個WebPageExecutingBase抽象類別,他擁有一個抽象方法Execute,View轉成c#程式會建立一個類別就會繼承於WebViewPage並把使用者頁面程式碼實現在Execute方法.

1
public abstract void Execute();
Read more »

Agenda

前言

繼承ActiontResult類別中ViewResultBase最為複雜,因為ViewResultBase要找到實現IViewEngine物件取得取得View檔案,在透過實現IView物件把頁面渲染出來.

這篇會跟大家分享值型上面動作核心類別.

個人覺得MVC運用很多物件導向概念和用法,在讀程式時有件事情很重要是理解類別負責的工作和類別之間關係.就像現實生活中人與人的關係要了解清楚.

我有做一個可以針對於Asp.net MVC Debugger的專案,只要下中斷點就可輕易進入Asp.net MVC原始碼.

ViewResultBase.ExecuteResult

因為ExecuteResult是最終被呼叫方法,我們來解析ViewResultBase.ExecuteResult方法邏輯.

  1. 透過子類別實現FindView取得View相關資料.
  2. 呼叫實現IView物件Render方法,並將渲染出來資料透過Response.Output輸出到Client
Read more »

Agenda

前言

繼承ActiontResult類別中ViewResultBase最為複雜,因為ViewResultBase要找到實現IViewEngine物件取得取得View檔案,在透過實現IView物件把頁面渲染出來.

這篇會跟大家分享值型上面動作核心類別.

個人覺得MVC運用很多物件導向概念和用法,在讀程式時有件事情很重要是理解類別負責的工作和類別之間關係.就像現實生活中人與人的關係要了解清楚.

我有做一個可以針對於Asp.net MVC Debugger的專案,只要下中斷點就可輕易進入Asp.net MVC原始碼.

ViewResultBase.ExecuteResult

因為ExecuteResult是最終被呼叫方法,我們來解析ViewResultBase.ExecuteResult方法邏輯.

  1. 透過子類別實現FindView取得View相關資料.
  2. 呼叫實現IView物件Render方法,並將渲染出來資料透過Response.Output輸出到Client
Read more »

Agenda

前言

上一篇介紹到CreateActionResult方法會產生一個ActionResult物件利用MethodInfo資訊.

最後透過InvokeActionResult來呼叫ExecuteResult方法來執行ActionResultExecuteResult方法,基本上MVC找到且執行Action方法後面就沒再做甚麼特別的事情了(後面做資源釋放…)

1
2
3
4
protected virtual void InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult)
{
actionResult.ExecuteResult(controllerContext);
}

本篇來介紹常用的ActionResult其內部運作程式碼

我有做一個可以針對於Asp.net MVC Debugger的專案,只要下中斷點就可輕易進入Asp.net MVC原始碼.

6種基本的ActionResult

下面這六個類別是直接繼承於ActionResult的類別(其中有標註Base class代表這是抽象類別另外有類別繼承它)

Read more »

Agenda

前言

上一篇介紹到CreateActionResult方法會產生一個ActionResult物件利用MethodInfo資訊.

最後透過InvokeActionResult來呼叫ExecuteResult方法來執行ActionResultExecuteResult方法,基本上MVC找到且執行Action方法後面就沒再做甚麼特別的事情了(後面做資源釋放…)

1
2
3
4
protected virtual void InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult)
{
actionResult.ExecuteResult(controllerContext);
}

本篇來介紹常用的ActionResult其內部運作程式碼

我有做一個可以針對於Asp.net MVC Debugger的專案,只要下中斷點就可輕易進入Asp.net MVC原始碼.

6種基本的ActionResult

下面這六個類別是直接繼承於ActionResult的類別(其中有標註Base class代表這是抽象類別另外有類別繼承它)

Read more »