精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何避免ASP .NET Core中的冗余DI代碼?

譯文
開發 前端
本文講述如何利用基本控制器避免ASP.NET Core MVC中的依賴項注入代碼重復,并強制執行DRY原則。

[[408187]]

【51CTO.com快譯】使用ASP.NET Core或ASP.NET Core MVC處理Web應用程序中的控制器時,您可能會遇到代碼冗余。比如說,可能遇到過使用依賴項注入(DI)來注入所需服務的控制器。如果注入依賴項的代碼在多個控制器中被重用,就存在代碼冗余,并違反DRY原則。

本文著重介紹DI代碼冗余,并介紹如何構建自定義基本控制器以避免此類問題。要使用本文中提供的代碼示例,應該在系統中安裝Visual Studio 2019。如果您還沒有安裝,可以在此處下載Visual Studio 2019

Visual Studio中創建ASP.NET Core MVC項目

首先,不妨在Visual Studio 2019中創建一個ASP.NET Core項目。按照這些步驟將在 Visual Studio 2019中創建一個新的ASP.NET Core MVC項目。

1. 啟動Visual Studio IDE。

2. 點擊“創建新項目”。

3. 在“創建新項目”窗口中,從顯示的模板列表中選擇“ASP.NET Core Web App (Model-View-Controller)”。

4. 點擊“下一步”。

5. 在“配置新項目”窗口中,指定新項目的名稱和位置。

6. 根據個人喜好,選擇性勾選“將解決方案和項目放在同一目錄中”復選框。

7. 點擊“下一步”。

8. 在隨后顯示的“額外信息”窗口中,從頂部的下拉列表中選擇.NET 5.0作為目標框架。任由“身份驗證類型”處于“無”(默認)的狀態。

9. 確保“啟用Docker”、“為HTTPS配置”和“啟用Razor運行時編譯”等復選框未被勾選,因為我們不會在這里使用任何這些功能。

10. 點擊創建。

將創建一個新的ASP.NET Core MVC項目。我們將在本文的后續部分中使用這個項目來處理依賴項注入。

現在按照下面列出的步驟,在您的項目中創建額外控制器。

1. 鼠標右擊控制器解決方案文件夾。

2. 選擇添加 -> 控制器。

3. 在“添加新腳手架項”對話框中,選擇API作為模板(默認情況下將選擇MVC)。

4. 選擇“具有讀/寫操作的API控制器”這項。

5. 點擊添加。

6. 在隨后顯示的“添加新項”對話框中,為新控制器指定名稱。

7. 點擊添加。

ASP.NET Core中的內置基本控制器類

控制器有兩個基本類,即ControllerBase和Controller。ControllerBase類實現IController 接口,并提供幾個方法和屬性的實現。它定義了一個名為ExecuteCore的抽象方法,用于定位操作方法并執行它。無論何時構建API,您都應該使用ControllerBase。

Controller類擴展了ControllerBase類,提供了ExecuteCore方法,并添加了可以在控制器類中使用的幾個方法,比如View()和Redirect()。與ControllerBase一樣,Controller 類是支持視圖的基本控制器類。因此,只要在ASP.NET Core MVC中創建控制器,都應該使用Controller類。ControllerBase類提供了與路由和HttpContext的必要集成,以便您可以利用它們。它還含有管理ViewData和TempData所需的代碼。

ASP.NET Core中實現基本控制器類

我們在ASP.NET Core中創建新的API控制器類時,它默認擴展ControllerBase類。接下來,我們將創建基本控制器的實現。我們的基本控制器類將擴展框架的ControllerBase 類。

這是我們將在該示例中使用的實體類:

  1. public class Order 
  2.     { 
  3.         public int Id { get; set; } 
  4.         public int CustomerId { get; set; } 
  5.         public string Address { get; set; }        
  6.     } 

現在創建一個名為IOrderManager的下列接口,含有ProcessOrder方法的聲明。

  1. public interface IOrderManager 
  2.     { 
  3.         public void ProcessOrder(Order order); 
  4.     } 

接下來創建擴展IOrderManager接口,并實現ProcessOrder方法的OrderManager類。

  1. public class OrderManager : IOrderManager 
  2.    public void ProcessOrder(Order order
  3.    { 
  4.       throw new System.NotImplementedException(); 
  5.    } 

下列代碼片段顯示了您如何通過從ControllerBase類中推導來創建基本控制器類。

  1. [Route("api/[controller]")] 
  2. [ApiController] 
  3. public class BaseController : ControllerBase 
  4.    protected readonly ILogger<BaseController> _logger; 
  5.    protected readonly IOrderManager _orderManager; 
  6.    public BaseController(ILogger<BaseController> logger, 
  7.    IOrderManager orderManager) 
  8.    { 
  9.        _logger = logger; 
  10.        _orderManager = orderManager; 
  11.    } 

ASP.NET Core中擴展自定義基本控制器

現在您可以創建控制器,只需從我們剛創建的這個自定義基本控制器來推導。下列代碼片段表明了您如何通過剛創建的基本控制器類加以擴展來創建控制器類。

  1. [Route("api/[controller]")] 
  2. [ApiController] 
  3. public class OrderController : BaseController 
  4.    private readonly ILogger<OrderController> _logger; 
  5.   [HttpGet] 
  6.    public string Get() 
  7.    { 
  8.        return "OrderController"
  9.    } 
  10.    [HttpPost] 
  11.    public void ProcessOrder(Order order
  12.    { 
  13.       _orderManager.ProcessOrder(order); 
  14.    } 

然而,您會發現上述代碼不會編譯。以下是您會在Visual Studio中看到的錯誤:

該錯誤表明,您需要使用與BaseController類構造函數相同的參數實現另一個參數構造函數。但為什么?如果您要在擴展所創建的基本控制器類的所有控制器中復制依賴項注入代碼,也就失去了擴展類的目的。

要解決此問題,您可以利用HttpContext.RequestServices.GetService擴展方法。記住,如果您試圖在控制器的構造函數中訪問HttpContext實例,該實例將為null。

作為ASP.NET Core請求的一部分而存在的服務可通過HttpContext.RequestServices集合來訪問。這意味著當您請求服務時,將從該集合解析請求。

將HttpContext添加到ASP.NET Core中的基本控制器類

這是我們的BaseController 類的更新后源代碼。

  1. public abstract class BaseController<T> : ControllerBase where T : BaseController<T> 
  2.   private ILogger<T> _logger; 
  3.   protected ILogger<T> Logger => _logger ?? (_logger = HttpContext.RequestServices.GetService<ILogger<T>>());        

OrderController類擴展這個抽象的BaseController類,如下面的代碼片段所示。

  1. [Route("api/[controller]")] 
  2. [ApiController] 
  3. public class OrderController : BaseController<OrderController> 
  4.     { 
  5.         private readonly IOrderManager _orderManager; 
  6.         public OrderController(IOrderManager orderManager) 
  7.         { 
  8.             _orderManager = orderManager; 
  9.         } 
  10.         [HttpGet] 
  11.         public string Get() 
  12.         { 
  13.             Logger.LogInformation("Hello World!"); 
  14.             return "Inside the Get method of OrderController"
  15.         } 
  16.         [HttpPost] 
  17.         public void ProcessOrder(Order order
  18.         { 
  19.             _orderManager.ProcessOrder(order); 
  20.         } 
  21.     } 

就是這樣!OrderController可利用Logger實例,并利用構造函數注入來注入其他服務。

最后,記得將您的服務登記在Startup類的ConfigureServices方法中,所下所示:

  1. public void ConfigureServices(IServiceCollection services) 
  2.         { 
  3.             services.AddTransient<IOrderManager,OrderManager>(); 
  4.             services.AddControllersWithViews(); 
  5.         } 

最好使用參數化的構造函數來解析依賴項,比如通過使用構造函數注入。這將幫助您創建更易于測試和維護的類。

原文標題:How to avoid redundant DI code in ASP.NET Core,作者:Joydip Kanjilal

【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】

 

責任編輯:華軒 來源: 51CTO
相關推薦

2024-11-27 00:24:04

2019-11-08 08:00:00

ASP .NETASP .NET Cocookie

2021-02-19 06:54:33

配置系統ASP.NET Cor

2021-03-04 11:10:29

容器化Docker虛擬機

2021-01-11 05:20:05

Controller代碼數據層

2019-08-12 08:00:00

ASP.NetASP.Net Cor編程語言

2021-01-15 05:38:28

ASPHttp端口

2021-01-13 07:33:41

API數據安全

2021-03-08 07:32:05

Actionweb框架

2021-10-12 10:00:01

架構機密數據

2021-01-05 07:51:06

版本化ASP

2021-01-31 22:56:50

FromServiceASP

2021-02-28 20:56:37

NCache緩存框架

2021-02-03 13:35:25

ASPweb程序

2021-03-10 09:40:43

LamarASP容器

2021-01-07 07:39:07

工具接口 Swagger

2021-01-28 22:39:35

LoggerMessa開源框架

2021-03-03 22:37:16

MediatR中介者模式

2021-02-06 21:40:13

SignalR通訊TypeScript

2021-11-01 14:52:38

ElasticSear索引SQL
點贊
收藏

51CTO技術棧公眾號

久久免费视频网站| 国产精品污www在线观看| 国产一区二区三区18 | 婷婷亚洲五月| 日韩免费看网站| 国产极品尤物在线| 日本私人网站在线观看| 久久久久久久波多野高潮日日| 国产一级揄自揄精品视频| 精品亚洲视频在线| sm捆绑调教国产免费网站在线观看| 久久综合久久综合久久综合| 国产精品视频一区国模私拍 | 欧美激情女人20p| 亚洲精品乱码久久久久久不卡 | 国产精品久久久久久亚洲调教 | 视频一区 中文字幕| 久热re这里精品视频在线6| 超碰精品一区二区三区乱码| 亚洲精品在线视频免费观看| 亚洲影视资源| 欧美性xxxx极品高清hd直播| 青少年xxxxx性开放hg| 天天躁日日躁狠狠躁喷水| 久久精品久久精品| 欧美亚洲国产精品| 国产精品老熟女一区二区| 蜜桃精品wwwmitaows| 日韩精品一区二区三区四区| 在线观看高清免费视频| 国产精品xx| 免费看欧美一级片| 野外性满足hd| 成人动漫视频在线观看| 午夜精品福利一区二区三区蜜桃| 亚洲综合视频一区| 日韩在线免费播放| 国产乱码精品一区二区三区亚洲人 | 久久综合色8888| 亚洲a中文字幕| 欧美一区二区三区网站| 亚洲国产激情| 久久成人精品视频| 天堂网中文在线观看| 国产一区二区亚洲| 亚洲开心激情网| 久久亚洲精品大全| 精精国产xxxx视频在线| 波多野结衣中文一区| 91精品啪在线观看麻豆免费| 欧产日产国产69| 欧美日韩伊人| 欧美成人免费视频| 99成人在线观看| 超碰中文字幕在线| 禁久久精品乱码| 久久夜色精品国产欧美乱| 长河落日免费高清观看| 国产欧美一区二区精品久久久| 亚洲国产成人精品久久久国产成人一区| 思思久久精品视频| 四虎国产精品免费久久5151| 欧美天堂一区二区三区| 手机看片福利日韩| 欧美国产大片| 91国偷自产一区二区三区成为亚洲经典| 欧美在线观看www| av中文在线资源库| 亚洲成人精品一区| 黄色免费福利视频| 在线看片福利| 欧美午夜久久久| 国语对白做受xxxxx在线中国| 成人爱爱网址| 欧美专区日韩专区| 日本肉体xxxx裸体xxx免费| 欧美性aaa| 91精品国产一区二区三区香蕉 | 欧美videossex| 亚洲一区二区三区小说| 欧洲精品一区二区三区久久| 大桥未久在线视频| 色94色欧美sute亚洲线路一久| 国产免费成人在线| 日韩一区二区三区免费视频| 欧美挠脚心视频网站| 九九热视频免费| 中文字幕亚洲在线观看| 精品在线观看国产| 日韩一级片在线免费观看| 99久久www免费| 欧美黑人性视频| 69视频免费在线观看| 免费一级片91| 91文字幕巨乱亚洲香蕉| 在线观看xxx| 国产精品入口麻豆九色| 香港三级日本三级a视频| 日韩电影免费看| 欧美伦理视频网站| 影音先锋资源av| 加勒比久久综合| 欧美精品一区三区| www毛片com| 国内久久婷婷综合| 免费国产一区| 麻豆网在线观看| 精品magnet| 一级淫片在线观看| 亚洲免费专区| 久久99精品久久久久久琪琪| 日日噜噜噜噜人人爽亚洲精品| 久久国产综合精品| 久久婷婷人人澡人人喊人人爽| 免费av在线播放| 欧美视频在线观看免费| 香蕉视频xxxx| 欧美日韩夜夜| 萌白酱国产一区二区| 天堂网一区二区| 成人永久aaa| 伊人情人网综合| 一根才成人网| 精品国内二区三区| 午夜激情福利电影| 精品无码三级在线观看视频| 日韩激情视频在线播放| 成人一级黄色大片| 午夜一区不卡| 91丨九色丨国产| 尤物网址在线观看| 欧美午夜性色大片在线观看| 操人视频免费看| 国产精品嫩草影院桃色| 国产91丝袜在线18| 亚洲精品国产精品国自产| bl在线肉h视频大尺度| 欧美一级日韩免费不卡| 99久久99久久精品免费看小说.| 日韩网站在线| av在线不卡一区| 久久综合网导航| 欧美三级视频在线| 久操视频免费看| 亚洲人成毛片在线播放女女| 99国产在线视频| 黄色网在线播放| 欧美日韩一区国产| 男人天堂2024| 欧美电影免费| 青青久久aⅴ北条麻妃| 亚洲xxx在线| 亚洲视频小说图片| 亚洲一区日韩精品| 欧美一区电影| 国产精品久久久一区| 日本久久久久久久久久久| 亚洲精品综合在线观看| 亚洲第一福利社区| 久久人人爽人人| a级片免费观看| 最近中文字幕一区二区三区| 男生操女生视频在线观看| 色97色成人| 欧美性做爰猛烈叫床潮| 欧美熟妇精品黑人巨大一二三区| 亚洲国产导航| 精品乱色一区二区中文字幕| 国产v日韩v欧美v| 精品毛片乱码1区2区3区 | 国产情侣一区在线| 久久伊人色综合| 亚洲精品成人区在线观看| 亚洲一二三区在线观看| 国产二级一片内射视频播放 | 欧美刺激性大交免费视频| 国产高清精品软件丝瓜软件| 亚洲一区二区三区视频在线播放 | 欧美 中文字幕| 亚洲精品亚洲人成人网| 91人妻一区二区| 激情综合中文娱乐网| 久久亚洲免费| 国产精品诱惑| 欧美福利小视频| 四虎国产精品永远| 欧美日韩一区二区电影| 欧美成人免费看| 国产a区久久久| www一区二区www免费| 国产欧美日韩在线观看视频| 91免费看国产| 成年人视频免费在线播放| 亚洲女人被黑人巨大进入| 日韩欧美国产另类| 亚洲欧洲综合另类在线| 国产伦精品一区二区三区精品 | 91蝌蚪视频在线观看| 天堂网在线观看国产精品| 国产精品区一区二区三含羞草| 91久久国产综合久久91猫猫| 久久中文精品视频| 男同在线观看| 日韩视频在线你懂得| 波多野结衣 久久| 亚洲日本在线天堂| 四虎影成人精品a片| 国内外成人在线| 黄色高清无遮挡| 欧美国产高清| 日韩在线三区| 成人性生交大片免费看中文视频 | 日韩av在线免播放器| 狠狠躁夜夜躁人人爽视频| 樱花影视一区二区| 精品一区二区三区蜜桃在线| 成人网在线免费视频| 中文字幕天天干| 在线亚洲欧美| 亚洲精品少妇一区二区| 成人三级视频| 精品亚洲欧美日韩| 国产午夜久久av| 国产精品国模在线| 蜜桃视频m3u8在线观看| 日韩有码在线电影| 国产剧情在线观看| 欧美变态口味重另类| 欧类av怡春院| 狠狠色丁香久久婷婷综| 欧美一级免费播放| 欧美77777| 色综合亚洲欧洲| 人妻少妇精品一区二区三区| 国产片一区二区三区| www.日本高清| 成人毛片老司机大片| 日韩精品在线播放视频| 麻豆精品久久精品色综合| 97国产在线播放| 狠狠入ady亚洲精品| 激情五月五月婷婷| 999久久久国产精品| 久久久久无码国产精品一区| 日韩精品一区二区三区中文| 91夜夜未满十八勿入爽爽影院| 日韩一区精品| 国产精品日日做人人爱| 国产一区二区主播在线| 国产精品h片在线播放| 亚洲成人看片| 国产99久久精品一区二区永久免费 | 亚洲一区二区三区免费在线观看| 欧美国产视频一区| 国产精品97| 香蕉精品视频在线| 五月开心六月丁香综合色啪| 自拍偷拍一区二区三区| 日韩美女一区二区三区在线观看| 亚洲精品永久www嫩草| 日韩欧美综合| 在线一区亚洲| 一精品久久久| 久久免费看毛片| 伊人青青综合网| www.日本三级| 国产日韩欧美一区| 激情婷婷综合网| 日韩精品乱码免费| www.亚洲高清| 久久aⅴ国产欧美74aaa| 小日子的在线观看免费第8集| 高清国产一区二区| 男人的天堂免费| 国产成人精品影视| 欧美图片自拍偷拍| 亚洲精品视频免费看| 国产a级片免费观看| 水野朝阳av一区二区三区| 免费一级特黄录像| 激情久久五月天| 亚洲AV成人精品| 99久久国产免费看| 日本一道本视频| 亚洲欧美日韩在线| 久久视频免费在线观看| 日韩一区欧美| 亚洲v欧美v另类v综合v日韩v| 欧美日韩有码| 国产av不卡一区二区| 精品999网站| 国产日产欧美视频| 日本成人中文字幕在线视频| 91视频福利网| 91美女蜜桃在线| 日本女人性生活视频| 国产精品久久久久aaaa| 黄色小视频在线免费看| 日本道免费精品一区二区三区| 一级全黄少妇性色生活片| 精品国产凹凸成av人导航| 久久米奇亚洲| 欧美日韩电影在线观看| 毛片无码国产| 91在线中文字幕| 九一成人免费视频| 麻豆视频传媒入口| 久久亚洲欧美| 中文字幕永久免费| 中文字幕高清一区| 国产做受高潮漫动| 在线播放亚洲一区| 男女视频在线观看免费| 欧美日韩第一视频| 国产亚洲人成a在线v网站| 精品国产91亚洲一区二区三区www| 首页国产精品| 黄色片久久久久| 韩国三级中文字幕hd久久精品| 一道本在线观看| 亚洲黄一区二区三区| 中文字幕资源网| 精品乱码亚洲一区二区不卡| 成年人视频在线看| 98精品国产自产在线观看| 成人在线免费| 欧美人与物videos另类| 在线成人www免费观看视频| 在线视频观看一区二区| 欧美激情一区二区三区在线| 西西44rtwww国产精品| 欧美一级生活片| 黄色免费在线观看网站| 国产成人午夜视频网址| 天天久久夜夜| 佐佐木明希av| 精品一区二区三区欧美| 在线免费观看视频| 色88888久久久久久影院按摩| 天天干,夜夜爽| 久久露脸国产精品| 91综合精品国产丝袜长腿久久| 警花观音坐莲激情销魂小说| 久久99精品国产.久久久久 | 精品国产欧美日韩一区二区三区| 久久国产精品一区二区三区四区| 激情视频一区| 无码人妻一区二区三区在线| 一区二区激情小说| www.天堂av.com| 九九热视频这里只有精品| 精品国产亚洲一区二区三区大结局 | 伦av综合一区| 亚洲人永久免费| 中文字幕成在线观看| 久久青青草综合| 久久久久久久尹人综合网亚洲| 偷拍女澡堂一区二区三区| 亚洲国产中文字幕在线视频综合| 丰满人妻一区二区三区免费视频| 欧美另类第一页| 一级毛片精品毛片| 精品人妻少妇一区二区| 97精品久久久久中文字幕| 99精品人妻国产毛片| 一区二区中文字幕| 日韩国产大片| 国产精品久久一区二区三区| 青青草国产成人a∨下载安卓| 国产主播在线看| 久久精品免费在线观看| 国产精品suv一区二区三区| 亚洲女人天堂视频| 粉嫩91精品久久久久久久99蜜桃 | 亚洲日本va| 欧美1234区| 国产成人avxxxxx在线看| 亚洲精品播放| 成人免费xxxxx在线视频| 国产精品入口麻豆九色| av加勒比在线| 97精品视频在线| 欧美色女视频| 三级视频中文字幕| 亚洲日本青草视频在线怡红院| www.成人精品| 亚洲一卡二卡三卡四卡| 你懂的视频在线| 国产日韩欧美中文| 欧美国产91| 99久久人妻无码精品系列| 欧美精品第1页| 2021中文字幕在线| 亚洲精品人成| 成人免费三级在线| 中文文字幕一区二区三三| 久久99热精品| 精品一区二区三区在线| 蜜桃视频无码区在线观看| 色综合久久久久久久久久久|