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
留言分享你的想法!
avatar-img
Czxdas的沙龍
0會員
2內容數
你可能也想看
Thumbnail
嗨大家好!我是重度網購患者賴床鴨鴨!每年最期待的蝦皮12.12又要來了,我的購物車也早已瀕臨爆炸邊緣。 尤其是我最近在做的「高速負離子吹風機」評比,一口氣比較了5款,每台都想帶回家!但身為一個精打細算的小資族,我發現了一個天大的祕密:原來在蝦皮購物,居然可以不只省錢,還能偷偷賺錢! 今天這篇,我
Thumbnail
嗨大家好!我是重度網購患者賴床鴨鴨!每年最期待的蝦皮12.12又要來了,我的購物車也早已瀕臨爆炸邊緣。 尤其是我最近在做的「高速負離子吹風機」評比,一口氣比較了5款,每台都想帶回家!但身為一個精打細算的小資族,我發現了一個天大的祕密:原來在蝦皮購物,居然可以不只省錢,還能偷偷賺錢! 今天這篇,我
Thumbnail
又到了每年最溫(ㄏㄨㄚ)馨(ㄑㄧㄢˊ)的季節,其實在還單身的時候,我並沒有特別喜愛這個節日,但自從去了歐洲生活,再加上有了孩子後,對於聖誕節的好感與日俱增,除了要幫孩子準備聖誕禮物,還需要幫家佈置一下才有儀式感,若你對於今年的聖誕禮物還沒有頭緒?趁著蝦皮雙12的優惠,快來看看我買了什麼吧!
Thumbnail
又到了每年最溫(ㄏㄨㄚ)馨(ㄑㄧㄢˊ)的季節,其實在還單身的時候,我並沒有特別喜愛這個節日,但自從去了歐洲生活,再加上有了孩子後,對於聖誕節的好感與日俱增,除了要幫孩子準備聖誕禮物,還需要幫家佈置一下才有儀式感,若你對於今年的聖誕禮物還沒有頭緒?趁著蝦皮雙12的優惠,快來看看我買了什麼吧!
Thumbnail
來了來了~~~購物狂最期待的大日子真的就是-蝦皮 12.12,折扣真的一年比一年還誇張,價格越殺越狠,各種免運、滿額折、品牌券直接發到領不完! 從這裡加入我的分潤連結:https://s.shopee.tw/7fSd8GVvNC 推薦碼請填:A6ZVDYE
Thumbnail
來了來了~~~購物狂最期待的大日子真的就是-蝦皮 12.12,折扣真的一年比一年還誇張,價格越殺越狠,各種免運、滿額折、品牌券直接發到領不完! 從這裡加入我的分潤連結:https://s.shopee.tw/7fSd8GVvNC 推薦碼請填:A6ZVDYE
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