本文翻譯自《Controller activation and dependency injection in ASP.NET Core MVC》,由于水平有限,故無法保證翻譯完全準(zhǔn)確,歡迎指出錯(cuò)誤。謝謝!

在我最后一篇關(guān)于 ASP.NET Core 釋放IDsiposable對(duì)象的文章(中文、英文原文)中,Mark Rendle 指出,MVC 控制器在請(qǐng)求結(jié)束時(shí)也會(huì)釋放資源。乍一看,此范圍內(nèi)的資源在請(qǐng)求結(jié)束時(shí)會(huì)釋放似乎是顯而易見的,但是 MVC 控制器的處理方式實(shí)際上與大多數(shù)服務(wù)略有不同。

在這篇文章中,我將介紹在ASP.NET Core MVC中IControllerActivator是如何創(chuàng)建控制器的,以及通過依賴注入創(chuàng)建控制器存在的差異。

默認(rèn)的IControllerActivator

在 ASP.NET Core 中,當(dāng) MVC 中間件接收到請(qǐng)求時(shí),通過路由選擇要執(zhí)行的控制器和操作方法。為了實(shí)際的執(zhí)行操作, MVC 中間件必須創(chuàng)建所選控制器的實(shí)例。

創(chuàng)建控制器的過程依賴眾多不同的提供者和工廠類,但最終是由實(shí)現(xiàn)IControllerActivator接口的實(shí)例來決定的。實(shí)現(xiàn)類只需要實(shí)現(xiàn)兩個(gè)方法:

public interface IControlle