🚫 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

前言

前面介紹完 Asp.net MVC解析器和IOC容器之間關係

本篇要介紹Controller如何去呼叫使用的Action方法.

ExecuteCoreControllerBase類別提供給Controller來實作Hook方法.

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

InvokeAction方法

之前說到MVC呼叫ControllerBase.Execute方法,其中這個方法做了幾件事情

  1. VerifyExecuteCalledOnce方法對於同步請求做一個防呆機制(不允許同一時間處理相同請求)
  2. Initialize初始化資料
  3. 呼叫ExecuteCore抽象方法(由Controller實現)
Read more »

Agenda

前言

前一篇介紹Asp.net MVC可透過DependencyResolver.SetResolver替換成IOC容器注入控制器物件.

要建立客製化的解析器可以實現IDependencyResolver介面並使用DependencyResolver.SetResolver替換DefaultDependencyResolver預設解析器

DependencyResolver,ControllerControllerFactory的關係如下圖

IOC_Asp.netMVC.png

本篇介紹DependencyResolverAsp.net MVC中有哪些實際的應用.

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

DefaultControllerActivator

Read more »

Agenda

前言

前一篇介紹Asp.net MVC可透過DependencyResolver.SetResolver替換成IOC容器注入控制器物件.

要建立客製化的解析器可以實現IDependencyResolver介面並使用DependencyResolver.SetResolver替換DefaultDependencyResolver預設解析器

DependencyResolver,ControllerControllerFactory的關係如下圖

IOC_Asp.netMVC.png

本篇介紹DependencyResolverAsp.net MVC中有哪些實際的應用.

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

DefaultControllerActivator

Read more »

Agenda

前言

IOC依賴反轉是oop重要程式設計思想。

Ioc—Inversion of Control 控制反轉

控制反轉是一個設計思想 ,把對於某個物件的控制權移轉給第三方容器.

詳細資訊可以查看小弟另一篇文章 IOC(控制反轉),DI(依賴注入) 深入淺出~~

有沒有人會很好奇說為什麼只需要透過DependencyResolver.SetResolver方法我就可以直接使用AutoFac或其他IOC容器?

1
2
3
4
//....
// 建立相依解析器
IContainer container = new builder.Build();
DependencyResolver.SetResolver(container);

今天跟大家分享Asp.net MVC利用什麼設計技巧,讓外部IOC容器可以很方便融入系統中.

Read more »

Agenda

前言

IOC依賴反轉是oop重要程式設計思想。

Ioc—Inversion of Control 控制反轉

控制反轉是一個設計思想 ,把對於某個物件的控制權移轉給第三方容器.

詳細資訊可以查看小弟另一篇文章 IOC(控制反轉),DI(依賴注入) 深入淺出~~

有沒有人會很好奇說為什麼只需要透過DependencyResolver.SetResolver方法我就可以直接使用AutoFac或其他IOC容器?

1
2
3
4
//....
// 建立相依解析器
IContainer container = new builder.Build();
DependencyResolver.SetResolver(container);

今天跟大家分享Asp.net MVC利用什麼設計技巧,讓外部IOC容器可以很方便融入系統中.

Read more »

Agenda

前言

上篇得知MVC預設透過DefaultControllerFactory反射方式動態建立Controller物件

本篇會分享我們常用到Controller基礎類別和相關物件.

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

ControllerBase(Controller基礎類別)

ControllerBase具有如下幾個重要的屬性

  1. TempData:將設置資料存於Session中,生命週期除了當下請求, 導頁後仍可續存.
  2. ViewBag:儲存Controllerview傳遞資料或變數 (型別dynamic)
  3. ViewData:儲存Controllerview傳遞資料或變數 (型別ViewDataDictionary)

雖說ViewBagViewData看起來使用不同的物件,但從程式碼了解到其實ViewBag也是使用ViewData引用.

Read more »

Agenda

前言

上篇得知MVC預設透過DefaultControllerFactory反射方式動態建立Controller物件

本篇會分享我們常用到Controller基礎類別和相關物件.

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

ControllerBase(Controller基礎類別)

ControllerBase具有如下幾個重要的屬性

  1. TempData:將設置資料存於Session中,生命週期除了當下請求, 導頁後仍可續存.
  2. ViewBag:儲存Controllerview傳遞資料或變數 (型別dynamic)
  3. ViewData:儲存Controllerview傳遞資料或變數 (型別ViewDataDictionary)

雖說ViewBagViewData看起來使用不同的物件,但從程式碼了解到其實ViewBag也是使用ViewData引用.

Read more »

Agenda

前言

前篇介紹MVC使用HttpHandlerMvcHandler透過並MvcRouteHandler物件來返回.

relationship_pic.PNG

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

大家介紹如何取得Controller執行物件

取得執行Controller

ProcessRequest方法是透過ProcessRequestInit取得執行controller物件,讓我們看看是這個方法如何controller物件.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
private void ProcessRequestInit(HttpContextBase httpContext, out IController controller, out IControllerFactory factory)
{
HttpContext currentContext = HttpContext.Current;
if (currentContext != null)
{
bool? isRequestValidationEnabled = ValidationUtility.IsValidationEnabled(currentContext);
if (isRequestValidationEnabled == true)
{
ValidationUtility.EnableDynamicValidation(currentContext);
}
}

AddVersionHeader(httpContext);
RemoveOptionalRoutingParameters();

// Get the controller type
string controllerName = RequestContext.RouteData.GetRequiredString("controller");

// Instantiate the controller and call Execute
factory = ControllerBuilder.GetControllerFactory();
controller = factory.CreateController(RequestContext, controllerName);
if (controller == null)
{
throw new InvalidOperationException(
String.Format(
CultureInfo.CurrentCulture,
MvcResources.ControllerBuilder_FactoryReturnedNull,
factory.GetType(),
controllerName));
}
}
Read more »

Agenda

前言

前篇介紹MVC使用HttpHandlerMvcHandler透過並MvcRouteHandler物件來返回.

relationship_pic.PNG

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

大家介紹如何取得Controller執行物件

取得執行Controller

ProcessRequest方法是透過ProcessRequestInit取得執行controller物件,讓我們看看是這個方法如何controller物件.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
private void ProcessRequestInit(HttpContextBase httpContext, out IController controller, out IControllerFactory factory)
{
HttpContext currentContext = HttpContext.Current;
if (currentContext != null)
{
bool? isRequestValidationEnabled = ValidationUtility.IsValidationEnabled(currentContext);
if (isRequestValidationEnabled == true)
{
ValidationUtility.EnableDynamicValidation(currentContext);
}
}

AddVersionHeader(httpContext);
RemoveOptionalRoutingParameters();

// Get the controller type
string controllerName = RequestContext.RouteData.GetRequiredString("controller");

// Instantiate the controller and call Execute
factory = ControllerBuilder.GetControllerFactory();
controller = factory.CreateController(RequestContext, controllerName);
if (controller == null)
{
throw new InvalidOperationException(
String.Format(
CultureInfo.CurrentCulture,
MvcResources.ControllerBuilder_FactoryReturnedNull,
factory.GetType(),
controllerName));
}
}
Read more »

Agenda

前言

前一篇介紹路由封裝了Http請求路徑資訊可以讓我們找到相對應的ActionController並呼叫執行外,也可透過MapPageRoute來將請求教給.aspx實體檔案來處理請求.

Route甚至可以讓我們自己客製化處理HttpHandler 在Route中建立處理客製化HttpHandler可謂很有彈性

本篇介紹Route物件建立MvcRouteHandler物件且如何取到IHttpHandler.

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

MVC取得使用HttpHandler (IHttpHandler)

之前說到我們透過MapRoute擴展方法加入一個Route物件給RouteCollection全域路由集合.

Route使用的IRouteHandler介面是由MvcRouteHandler來實現

Read more »