開源博客項目Blog .NET Core源碼學習(9:Autofac使用淺析)

??開源博客項目Blog使用Autofac注冊并管理組件和服務,Autofac是面向.net 的開源IOC容器,支持通過接口、實例、程序集等方式注冊組件和服務,同時支持屬性注入、方法注入等注入方式。本文學習并記錄Blog項目中Autofac的使用方式。
??整個Blog解決方案主要在App.Hosting和App.Framwork項目中使用Autofac,這里的使用指的是注冊Autofac中間件、注冊組件和服務等,不包括在控制器類中傳遞接口實例。

在這里插入圖片描述
??App.Hosting項目中主要在Program.cs文件中注冊Autofac中間件,如下圖所示,并調用App.Framwork項目中的擴展類注冊相關組件和服務。
在這里插入圖片描述

??在Program.cs文件的下半部分還調用了App.Framwork項目中的函數賦予全局靜態類Storage中的Container屬性賦予基于Autofac的ILifetimeScope實例對象,以便在需要的地方能通過代碼獲取Autofac注冊的組件。
在這里插入圖片描述
??App.Framwork項目主要在5個類中調用Autofac相關的類或函數,主要包括:
??1)AutofacModule類,位于AutofacModule.cs,命名空間為App.Framwork. DependencyInjection ,主要以倉儲模式注入組件,該類將解決方案中所有繼承自IScopedDependency 、ISingletonDependency、ITransientDependency等接口的類型注冊為組件,將繼承自IScopedDependency接口的類型注冊為每次使用都創建新實例(InstancePerDependency),將繼承自ISingletonDependency接口的類型注冊為單例模式(SingleInstance),將繼承自ITransientDependency接口的類型注冊為每次請求創建新實例(InstancePerLifetimeScope),同時該類將所有繼承自ControllerBase的類型都注冊為屬性自動注入(PropertiesAutowired)。

??2)ContainerBuilderExtensions類,位于ContainerBuilderExtensions.cs,命名空間為App. Framwork.DependencyInjection.Extensions,該類主要將解決方案的所有程序集中類型以指定字符串結尾的類型注冊為每次請求創建新實例(InstancePerLifetimeScope),在本項目中主要是注冊所有以service結尾的類。
??3)AspectCoreInterceptorAutofacExtensions類,位于AspectCoreInterceptorAutofacExtensions.cs,命名空間為App.Framwork.DependencyInjection. Extensions。該類主要基于AspectCore的動態代理接入Autofac,這個沒有看的太明白。
??4)Storage類,位于Storage.cs,命名空間為App.Framwork,該類的屬性Container類型為ILifetimeScope,在App.Hosting項目的Program.cs中調用app.UseStaticContainer()(該函數定義于App.Framwork項目ApplicationBuilderExtensions類,位于ApplicationBuilderExtensions.cs,命名空間為App.Framwork.DependencyInjection.Extensions)賦予基于Autofac的ILifetimeScope實例對象值。Container屬性主要在Storage類的GetService函數中用于返回指定服務的組件。

參考文獻:
[1]https://gitee.com/miss_you/Blog
[2]https://autofac.org/
[3]https://github.com/autofac/Autofac
[4]https://blog.csdn.net/Mr_Fei/article/details/129199686

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/697612.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697612.shtml
英文地址,請注明出處:http://en.pswp.cn/news/697612.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Swift基礎知識:28.Swift協議

在 Swift 中,協議(protocol)是一種定義方法、屬性和其他特定任務的藍圖。類、結構體或枚舉可以遵循(adopt)協議,從而提供所需的功能。協議定義了一組要求,遵循協議的類型需要提供對應的功能實現…

LED景觀照明燈驅動電路串聯、并聯和恒流3款方案

LED景觀照明燈是現代城市照明中常見的一種燈具。為了保證LED景觀照明燈的正常工作,需要設計合適的驅動電路。LED景觀照明燈的驅動電路可以采用串聯、并聯或恒流的方式來設計。 首先,串聯驅動電路是指將多個LED燈串聯在一起,然后接入電源進行…

【Spring】常見問題總結

目錄 1. 什么是 Spring 框架? 2. 列舉一些重要的Spring模塊? 3. RestController vs Controller 4. Spring IOC & AOP 4.1 談談自己對于 Spring IoC 和 AOP 的理解 IoC AOP 4.2 Spring AOP 和 AspectJ AOP 有什么區別? 5. Spring bean 5.1…

C語言第二十九彈---浮點數在內存中的存儲

?個人主頁: 熬夜學編程的小林 💗系列專欄: 【C語言詳解】 【數據結構詳解】 目錄 1、浮點數在內存中的存儲 1.1、練習 1.2、浮點數怎么轉化為二進制 1.3、浮點數的存儲 1.3.1、浮點數存的過程 1.3.2、浮點數取的過程 1.3、題目解析…

FPGA領域頂級學術會議

FPGA領域頂級學術會議主要有FPGA,FCCM,FPL和FPT。 1 FPGA 會議全名是: ACM/SIGDA International Symposium on Field-Programmable Gate Arrays 網站是:https://dl.acm.org/conference/fpga FPGA常年在美國舉辦,每年2月,偏FPGA基礎研究; 該會議的論文免費下載。這個比…

【MATLAB源碼-第144期】基于matlab的蝴蝶優化算法(BOA)無人機三維路徑規劃,輸出做短路徑圖和適應度曲線。

操作環境: MATLAB 2022a 1、算法描述 ?蝴蝶優化算法(Butterfly Optimization Algorithm, BOA)是基于蝴蝶覓食行為的一種新穎的群體智能算法。它通過模擬蝴蝶個體在尋找食物過程中的嗅覺導向行為以及隨機飛行行為,來探索解空間…

vue3前端項目開發,具備純天然的防止爬蟲采集的特征

vue3前端項目開發,具備純天然的防止爬蟲采集的特征!眾所周知,網絡爬蟲可以在網上爬取到一些數據,很多公司,為了自己公司的數據安全, 尤其是web端項目,不希望被爬蟲采集。那么,您可以使用vue技術…

spark ui的job數,stage數以及task數

背景 我們在查看spark ui的界面時,一段spark sql的執行經常看到會有對應有幾個job,然后每個job又有幾個stage,而每個stage又有好多個task,那么這些job,stage,task是怎么和spark 算子對應的呢 算子和job數,stage數以及task數的對…

代碼隨想錄算法訓練營29期|day59 任務以及具體安排

第九章 動態規劃part16 583. 兩個字符串的刪除操作 // dp數組中存儲word1和word2最長相同子序列的長度 class Solution {public int minDistance(String word1, String word2) {int len1 word1.length();int len2 word2.length();int[][] dp new int[len1 1][len2 1];for …

Gartner信息圖:2024 年44種安全和風險管理技術采用路線圖

Gartner發布的該信息圖確定了全球企業正在采用的 44 種安全相關技術,并根據采用階段、部署風險和企業價值對它們進行了映射。安全和風險管理領導者可以使用此信息圖將他們的技術投資與同行進行比較。 2024 年安全和風險管理技術采用路線圖 SRM 領導者可以使用此信息…

世微AP8P059 靜態功耗小 太陽能人體紅外線感應IC

概述 AP8P059 是一款集成低壓 LDO 、光 控、充電控制、過充保護、欠壓保護、 PIR 感應、延時為一體的人體感應太陽能 LED 燈控制芯片,只需要很少的外接元件,適 用于鋰電池供電的 PIR 人體感應 LED 燈具 的應用。 外置的一級帶通增益放大 器便…

Python實現視頻轉音頻、音頻轉文本的最佳方法

文章目錄 Python實現視頻轉音頻和音頻轉文字視頻轉音頻步驟 1:導入moviepy庫步驟 2:選擇視頻文件步驟 3:創建VideoFileClip對象步驟 4:提取音頻步驟 5:保存音頻文件 音頻轉文字步驟 1:導入SpeechRecognitio…

RV新聞概要 --- 2024/02/23

來源:https://mp.weixin.qq.com/s/EEJVLQnXvgQTbtU_yrW9lw 晶心科技是一家上市公司(TWSE:6533;SIN:US03420C2089;ISIN:US03420C1099),已有18 年的經營歷史,是…

單向循環鏈表的操作

main函數: #ifndef __loopLinkList_H__#define __loopLinkList_H__typedef int datatype;union msg{ //若數據的類型也為int,則不需要這個聯合體datatype data;int len; //放頭結點,記錄鏈表長度};typedef struct node{union msg te…

Istio實戰:Istio Kiali部署與驗證

目錄 前言一、Istio安裝小插曲 注意事項 二、Kiali安裝三、Istio測試參考資料 前言 前幾天我就開始搗騰Istio。前幾天在執行istioctl install --set profiledemo -y 的時候老是在第二步就報錯了,開始我用的istio版本是1.6.8。 后面查看k8s與istio的版本對應關系后發…

vCenter、vSphere Client硬盤擴容詳解

文章目錄 1、需求2、vSphere 操作流程3、服務器操作3.1、查看分區空間大小3.2、列出所有可用塊設備的信息3.3、新建分區3.4、重讀分區表信息3.5、格式化分區信息3.6、查看卷組的詳細狀態3.7、創建物理卷3.8、擴容卷組3.9、邏輯卷在線擴容3.10、顯示物理卷屬性3.11、XFS 文件系統…

最少停車數(C 語言)

題目描述 特定大小的停車場,數組cars[]表示,其中1表示有車,0表示沒車。車輛大小不一,小車占一個車位(長度1),貨車占兩個車位(長度2),卡車占三個車位&#xf…

Rollup + Ts

Rollup Ts RollupTs demo 一、文件配置 | - src | | - utils | | | - .ts | | - .babelrc | | - main.js | | - style.css | - package.json | - rollup.config.js | - tsconfig.json二、插件下載 rollup // rollup 基本的包 typescript // ts 包 rollup/plug…

如何做bug分析 ?bug分析什么 ? 為什么要做bug分析 ?

每當我們完成一個版本測試時,總會在測試報告中添加一些分析bug的指標 ,主要用于分析在測試過程中存在的問題 。但是在分析的過程中你就可能遇到如下的問題 : 我應該分析那些指標呢 ?每一個具體的指標該如何分析 ?它能說…

Vue3學習——computed、watch、watchEffect

computed 與Vue2.x中computed配置功能一致寫法 import {computed} from vuesetup(){...//計算屬性——簡寫let fullName computed(()>{return person.firstName - person.lastName})//計算屬性——完整let fullName computed({get()return person.firstName - perso…