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

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

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

默認的IControllerActivator

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

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

public interface IControlle