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

熱AI工具

Undress AI Tool
免費脫衣服圖片

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

AI Clothes Remover
用于從照片中去除衣服的在線人工智能工具。

Clothoff.io
AI脫衣機(jī)

Video Face Swap
使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的代碼編輯器

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

禪工作室 13.0.1
功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級代碼編輯軟件(SublimeText3)

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

從零開始學(xué)習(xí)Laravel:控制器方法調(diào)用詳解在Laravel的開發(fā)中,控制器是一個非常重要的概念??刂破髌鸬搅诉B接模型和視圖的橋梁作用,負(fù)責(zé)處理來自路由的請求,并返回相應(yīng)的數(shù)據(jù)給視圖展示??刂破髦械姆椒梢员宦酚烧{(diào)用,這篇文章將詳細(xì)介紹如何編寫并調(diào)用控制器中的方法,同時會提供具體的代碼示例。首先,我們需要創(chuàng)建一個控制器??梢允褂肁rtisan命令行工具來生

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

本篇文章帶大家了解一下依賴注入,介紹一下依賴注入解決的問題和它原生的寫法是什么,并聊聊Angular的依賴注入框架,希望對大家有所幫助!

在laravel中,控制器(Controller)是一個類,用于實現(xiàn)一定的功能;控制器能將相關(guān)的請求處理邏輯組成一個單獨的類??刂破髦写娣胖幸恍┓椒?,實現(xiàn)一定的功能,通過路由調(diào)用控制器,不再使用回調(diào)函數(shù);控制器被存放在“app/Http/Controllers”目錄中。

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

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

在Yii框架中,控制器(Controllers)扮演著處理請求的重要角色。除了處理常規(guī)的頁面請求之外,控制器還可以用于處理Ajax請求。本文將介紹在Yii框架中處理Ajax請求的方法,并提供代碼示例。在Yii框架中,處理Ajax請求可以通過以下步驟進(jìn)行:第一步,創(chuàng)建一個控制器(Controller)類??梢酝ㄟ^繼承Yii框架提供的基礎(chǔ)控制器類yiiwebCo
