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
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
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控制器,是可以將此用圖解的方式將其軌跡整理出來,將其作出關係圖,當作踏入此框架的一個指引,近而未來可
Thumbnail
Laravel本身是MVC架構的Framework,但隨著專案越來越龐大,若不把系統架構分工再切細一點,可能會導致日後維護的困難。 例如可能會很常發生controller要與model溝通拿資料,又要處理商業邏輯,就會導致controller越來越肥,因此本文要介紹的是....
Thumbnail
Laravel本身是MVC架構的Framework,但隨著專案越來越龐大,若不把系統架構分工再切細一點,可能會導致日後維護的困難。 例如可能會很常發生controller要與model溝通拿資料,又要處理商業邏輯,就會導致controller越來越肥,因此本文要介紹的是....
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News