控制器中的依賴注入允許該框架提供所需的服務(wù),從而增強(qiáng)可檢驗(yàn)性和可維護(hù)性。 1。通過(guò)在構(gòu)造函數(shù)參數(shù)中聲明依賴項(xiàng)來(lái)使用構(gòu)造函數(shù)注入。 2。在啟動(dòng)文件中註冊(cè)服務(wù),例如program.cs,具有適當(dāng)?shù)膲勖?,例如AddScoped。 3.除非有必要,否則避免使用財(cái)產(chǎn)注入,因?yàn)樗谏w了依賴性。 4.利用內(nèi)置的DI功能進(jìn)行日誌記錄和配置,保持著專注於處理控制器中的HTTP請(qǐng)求。
當(dāng)您在ASP.NET Core或Spring等框架中與控制器合作時(shí),使用依賴注入(DI)是一種清潔的方法,可以在不硬編碼的情況下獲得控制器需求的服務(wù)。您只需聲明您在構(gòu)造函數(shù)中需要的依賴項(xiàng),然後該框架處理並為您創(chuàng)建並傳遞它們。
這是正確做的方法並避免常見(jiàn)的陷阱。
了解控制器中的依賴注入是什麼
簡(jiǎn)而言之,控制器中的依賴注入意味著讓其他人(框架的DI容器)為您提供工具(服務(wù),存儲(chǔ)庫(kù)等),而不是在控制器內(nèi)部創(chuàng)建它們。
這可以使您的代碼可測(cè)試,可維護(hù)和鬆散耦合。
例如:
- 您的控制器可能需要從數(shù)據(jù)庫(kù)獲取用戶數(shù)據(jù)的服務(wù)。
- 您只需在構(gòu)造函數(shù)中要求它,而不是手動(dòng)實(shí)例化該服務(wù)。
- 然後,該框架將自動(dòng)注入實(shí)例。
使用構(gòu)造函數(shù)注入(首選方法)
ASP.NET Core和Spring MVC等大多數(shù)現(xiàn)代框架都建議注入構(gòu)造函數(shù)。這是其工作原理:
您在控制器中定義一個(gè)或多個(gè)接口或具體類型作為參數(shù)的構(gòu)造函數(shù)。當(dāng)這些依賴性創(chuàng)建控制器時(shí),該框架可以解決這些依賴關(guān)係。
公共類UserController:ControllerBase { 私人Readonly iuserService _userService; public usercontroller(iuserService userervice) { _userService = userVice; } [httpget(“ {id}”)] 公共異步任務(wù)<irinctionResult> getuser(int id) { var user =等待_userService.getUserByIdAsync(id); 返回確定(用戶); } }
這裡發(fā)生了什麼:
-
IUserService
是您在其他地方定義的界面。 - 實(shí)際實(shí)現(xiàn)(如
UserService
)已在DI容器中註冊(cè)。 - 當(dāng)請(qǐng)求擊中該控制器時(shí),該框架知道要傳遞哪種具體服務(wù)。
這種方法是首選的,因?yàn)椋?/p>
- 它使依賴關(guān)係明確。
- 它使單元測(cè)試更加容易 - 您可以在測(cè)試期間將模擬對(duì)象直接傳遞到構(gòu)造函數(shù)中。
在啟動(dòng)中正確註冊(cè)服務(wù)
僅在控制器中聲明依賴項(xiàng)還不夠。您還必須在應(yīng)用程序的啟動(dòng)中註冊(cè)它們,以便DI系統(tǒng)知道如何解決它們。
在ASP.NET Core中,這通常發(fā)生在Startup.cs
文件或Program.cs
中,如果您使用的.NET 6。
//在program.cs(.net 6)中 var builder = webapplication.createbuilder(args); //在此處註冊(cè)服務(wù) Builder.Services.AddScoped <iuserService,userService>(); var app = builder.build();
要點(diǎn):
- 確保壽命與您的用例相匹配:
AddTransient
,AddScoped
或AddSingleton
。 - 不要忘記註冊(cè)接口和實(shí)現(xiàn)。
- 如果跳過(guò)此步驟,您將獲得無(wú)法解決服務(wù)的運(yùn)行時(shí)錯(cuò)誤。
避免注入財(cái)產(chǎn),除非有必要
某些框架支持屬性注入,在該框架上,您可以在其中裝飾具有[Inject]
或[Autowired]
的屬性的屬性。雖然可以正常工作,但除非有特定原因,否則通常會(huì)灰心。
為什麼?
- 它隱藏了依賴性 - 閱讀您的代碼不會(huì)僅通過(guò)查看構(gòu)造函數(shù)就不會(huì)看到所需的內(nèi)容。
- 它使測(cè)試變得更加困難,因?yàn)樵谑謩?dòng)實(shí)例化控制器時(shí),您無(wú)法輕易提供這些依賴項(xiàng)。
堅(jiān)持使用構(gòu)造函數(shù)注入,除非您處理迫使財(cái)產(chǎn)注入的舊系統(tǒng)或第三方組件。
獎(jiǎng)勵(lì)提示:通過(guò)DI使用內(nèi)置的記錄或配置
您不必總是創(chuàng)建自己的服務(wù)來(lái)使用DI。大多數(shù)框架已經(jīng)提供了有用的框架。
例如,在ASP.NET Core中,您可以直接注入ILogger<T>
:
私人讀取的ilogger <usercontroller> _logger; public usercontroller(iuserService userervice,ilogger <usercontroller> logger) { _userService = userVice; _logger = logger; }
或類似的注射配置選項(xiàng):
public usercontroller(ioptions <Apisettings>設(shè)置) { var timeout = settings.value.defaulttimeout; }
這些是DI如何幫助您的控制器專注於處理HTTP請(qǐng)求而不是管理內(nèi)部邏輯或配置的好示例。
這基本上就是您在控制器中使用依賴注入的方式。一旦您了解瞭如何正確地將啟動(dòng)中的東西連接到正確的構(gòu)造函數(shù)後,它就很簡(jiǎn)單了。
以上是如何在控制器中使用依賴注入?的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門(mén)文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6
視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)

熱門(mén)話題

由於Windows已成為首選的遊戲平臺(tái),因此確定其面向遊戲的功能就顯得尤為重要。其中之一是能夠在Windows11上校準(zhǔn)XboxOne控制器。借助內(nèi)建的手動(dòng)校準(zhǔn),您可以擺脫漂移、隨機(jī)移動(dòng)或效能問(wèn)題,並有效地對(duì)齊X、Y和Z軸。如果可用選項(xiàng)不起作用,您可以隨時(shí)使用第三方XboxOne控制器校準(zhǔn)工具。讓我們來(lái)了解一下!如何在Windows11上校準(zhǔn)我的Xbox控制器?在繼續(xù)操作之前,請(qǐng)確保將控制器連接到電腦並更新XboxOne控制器的驅(qū)動(dòng)程式。當(dāng)您使用它時(shí),也要安裝任何可用的韌體更新。 1.使用Wind

從零開(kāi)始學(xué)習(xí)Laravel:控制器方法呼叫詳解在Laravel的開(kāi)發(fā)中,控制器是一個(gè)非常重要的概念。控制器起到了連接模型和視圖的橋樑作用,負(fù)責(zé)處理來(lái)自路由的請(qǐng)求,並返回相應(yīng)的資料給視圖展示??刂破髦械姆椒梢员宦酚烧{(diào)用,這篇文章將詳細(xì)介紹如何編寫(xiě)並調(diào)用控制器中的方法,同時(shí)會(huì)提供特定的程式碼範(fàn)例。首先,我們需要建立一個(gè)控制器??梢允褂肁rtisan命令列工具來(lái)生

PHP是一種非常流行的程式語(yǔ)言,而CodeIgniter4是一種常用的PHP框架。在開(kāi)發(fā)Web應(yīng)用程式時(shí),使用框架是非常有幫助的,它可以加速開(kāi)發(fā)過(guò)程、提高程式碼品質(zhì)、降低維護(hù)成本。本文將介紹如何使用CodeIgniter4框架。安裝CodeIgniter4框架CodeIgniter4框架可以從官方網(wǎng)站(https://codeigniter.com/)下載。下

這篇文章帶大家了解一下依賴注入,介紹一下依賴注入解決的問(wèn)題和它原生的寫(xiě)法是什麼,並聊聊Angular的依賴注入框架,希望對(duì)大家有所幫助!

在laravel中,控制器(Controller)是一個(gè)類,用來(lái)實(shí)現(xiàn)一定的功能;控制器能將相關(guān)的請(qǐng)求處理邏輯組成一個(gè)單獨(dú)的類別??刂破髦写娣胖幸恍┓椒ǎ瑢?shí)現(xiàn)一定的功能,透過(guò)路由呼叫控制器,不再使用回呼函數(shù);控制器被存放在「app/Http/Controllers」目錄中。

在Laravel學(xué)習(xí)指南中,控制器方法的呼叫是一個(gè)非常重要的主題??刂破靼缪葜B接路由和模型的橋樑的角色,在應(yīng)用程式中起著至關(guān)重要的作用。本文將介紹控制器方法呼叫的最佳實(shí)踐,並提供具體的程式碼範(fàn)例幫助讀者更好地理解。首先,讓我們來(lái)了解控制器方法的基本結(jié)構(gòu)。在Laravel中,控制器類別通常存放在app/Http/Controllers目錄下,每個(gè)控制器類別包含多個(gè)

在Phalcon框架中使用依賴注入(DependencyInjection)的方法引言:在現(xiàn)代的軟體開(kāi)發(fā)中,依賴注入(DependencyInjection)是一種常見(jiàn)的設(shè)計(jì)模式,旨在提高程式碼的可維護(hù)性和可測(cè)試性。而Phalcon框架作為一個(gè)快速、低耗的PHP框架,也支援使用依賴注入來(lái)管理和組織應(yīng)用程式的依賴關(guān)係。本文將向您介紹如何在Phalcon框架中

在Yii框架中,控制器(Controllers)扮演著處理請(qǐng)求的重要角色。除了處理常規(guī)的頁(yè)面請(qǐng)求之外,控制器還可以用於處理Ajax請(qǐng)求。本文將介紹在Yii框架中處理Ajax請(qǐng)求的方法,並提供程式碼範(fàn)例。在Yii框架中,處理Ajax請(qǐng)求可以透過(guò)以下步驟進(jìn)行:第一步,建立一個(gè)控制器(Controller)類別。可以透過(guò)繼承Yii框架提供的基礎(chǔ)控制器類別yiiwebCo
