How Autofac helps .NET Core MVC DI - 圖解概述

更新 發佈閱讀 4 分鐘
raw-image

Autofac為可以幫忙達成DI的套件,其運作可以參考運作描述,與如何協助ASP.NET MVC達成DI

這次要了解如何為Dot NET Core MVC應用程式達成DI,勢必也要先了解Dot NET Core原本是如何運作的。可以參考 “ ASP.NET Core Host Outline diagram of Framework operation - With Startup Class” ,以圖來觀察比較容易。

所以會挑出原本 Dot NET Core 產生 Service Provider 的地方做比較,然後替換成Autofac套件所使用的物件。

原本Dot NET Core 產生 Service Provider如下:


raw-image


利用預設的 ServiceFactoryAdapter 與 DefaultServiceProviderFactory,建立了Provider。
其以ServiceCollection為參數透過DynamicServiceProviderEngine與父類別ServiceProviderEngine產生CallSiteFactory實體為屬性,存回HostBuilder的_appServices。如果要實現已經註冊的服務,可以呼叫透過DynamicServiceProviderEngine繼承的ServiceProvider中的函示GetService來進行resolve。
所以整個藍色的 Microsoft.Extensions.DependencyInjection 區域就是產生 Provider 的關鍵處。如果要取代成由Autofac來做DI,HostBuilder的_appServices 勢必要取到由 Autofac 所產生的 Provider。
所以替換如下:


raw-image

經由替換成 AutofacServiceProviderFactory後,其CreateBuilder函式所產生的容器就是 Autofac 的 ContainerBuilder 了,在這個函式會將原本Dot NET Core 的 ServiceCollection 所包含註冊好的 service 的東西轉成註冊到 ContainerBuilder 上。

接下來呼叫AutofacServiceProviderFactory的CreateServiceProvider函式,會將 Autofac 的 ContainerBuilder做 build的動作,將註冊好的的服務設置好。關於此可以參考 “Autofac 套件如何達成IOC 目的- 概述圖解”。

接下來開發者可以於專案中的 Startup 類別 加入下列函式,註冊想要resolve的服務至 Autofac Container 中:

public void ConfigureContainer(ContainerBuilder builder)
{
builder.RegisterModule(new AutofacModule());
}

此段函式會在 Startup.ConfigureServices 在做 services.AddControllersWithViews() 或 services.AddController() 時,會執行Microsoft.AspNetCore.Hosting 下的 GenericWebHostBuilder 的 UseStartup 會抓出此 method 來執行。

最後將範例做簡單的展示:


raw-image


raw-image


raw-image


raw-image


raw-image



留言
avatar-img
Czxdas的沙龍
0會員
2內容數
你可能也想看
Thumbnail
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
前言 大家好上次我們教了 Gitlab CI/CD 的 extends 如何使用,今天我們要來實際做一個真正佈署上線我們的服務,我們會分成兩個章節,第一部分先教大家怎麼寫 Docker Compose 佈署計畫書,第二部分教大家撰寫 CI/CD 自動化佈署流程計劃書 什麼是 Docker Com
Thumbnail
前言 大家好上次我們教了 Gitlab CI/CD 的 extends 如何使用,今天我們要來實際做一個真正佈署上線我們的服務,我們會分成兩個章節,第一部分先教大家怎麼寫 Docker Compose 佈署計畫書,第二部分教大家撰寫 CI/CD 自動化佈署流程計劃書 什麼是 Docker Com
Thumbnail
不管用哪種語言開發軟體,除非是那種一個 function 寫個幾萬行的人 (來人啊,把這種人拖去砍了),不然,一般都會根據某些因素,切割成模組或是特定功能的區塊 (一個 class 或是一個 function),但要完成一個特定功能,這些模組或區塊勢必要一起合作,因此這些模組與區塊就發生了關係。
Thumbnail
不管用哪種語言開發軟體,除非是那種一個 function 寫個幾萬行的人 (來人啊,把這種人拖去砍了),不然,一般都會根據某些因素,切割成模組或是特定功能的區塊 (一個 class 或是一個 function),但要完成一個特定功能,這些模組或區塊勢必要一起合作,因此這些模組與區塊就發生了關係。
Thumbnail
相信有在開發Web應用的朋友應該對於Postman這套工具相當熟悉, 這套工具可以協助我們在產品尚未完成之前可以先進行一些基本的介接測試,甚至我們可以使用Postman去呼叫雲端的API,像是Google的語音辨識、文字翻譯、字典查詢…,這類大廠相信也都開放許多標準API(Application P
Thumbnail
相信有在開發Web應用的朋友應該對於Postman這套工具相當熟悉, 這套工具可以協助我們在產品尚未完成之前可以先進行一些基本的介接測試,甚至我們可以使用Postman去呼叫雲端的API,像是Google的語音辨識、文字翻譯、字典查詢…,這類大廠相信也都開放許多標準API(Application P
Thumbnail
什麼是Kubernetes Service? 先來個官網的解說 A Kubernetes Service is an abstraction which defines a logical set of Pods and a policy by which to access them. 白話文就是
Thumbnail
什麼是Kubernetes Service? 先來個官網的解說 A Kubernetes Service is an abstraction which defines a logical set of Pods and a policy by which to access them. 白話文就是
Thumbnail
萬事起頭 這個簡單到不行的極度簡略步驟,卻是一切的基礎
Thumbnail
萬事起頭 這個簡單到不行的極度簡略步驟,卻是一切的基礎
Thumbnail
Autofac為可以幫忙達成DI的套件,其運作可以參考運作描述,與如何協助ASP.NET MVC達成DI。 這次要了解如何為Dot NET Core MVC應用程式達成DI,勢必也要先了解Dot NET Core原本是如何運作的。可以參考 “ ASP.NET Core Host Outline d
Thumbnail
Autofac為可以幫忙達成DI的套件,其運作可以參考運作描述,與如何協助ASP.NET MVC達成DI。 這次要了解如何為Dot NET Core MVC應用程式達成DI,勢必也要先了解Dot NET Core原本是如何運作的。可以參考 “ ASP.NET Core Host Outline d
Thumbnail
Net Core 為一跨平台的應用開發,其此框架上可以加上許多自製服務,稱之為容器也不為過。 如果要細說明此框架,完整明瞭,可以寫出一整本厚厚的書。但如果要先瞭解框架主要的運作過程,尤其是搭配MVC控制器,是可以將此用圖解的方式將其軌跡整理出來,將其作出關係圖,當作踏入此框架的一個指引,近而未來可
Thumbnail
Net Core 為一跨平台的應用開發,其此框架上可以加上許多自製服務,稱之為容器也不為過。 如果要細說明此框架,完整明瞭,可以寫出一整本厚厚的書。但如果要先瞭解框架主要的運作過程,尤其是搭配MVC控制器,是可以將此用圖解的方式將其軌跡整理出來,將其作出關係圖,當作踏入此框架的一個指引,近而未來可
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News