国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - 三種方法解決ASP.NET Core 6中的依賴項

三種方法解決ASP.NET Core 6中的依賴項

2021-12-22 15:13編程寶庫 ASP.NET教程

這篇文章主要介紹了解決ASP.NET Core 6依賴項的三種方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

依賴性注入是一種技術,它允許我們注入一個特定類的依賴對象,而不是直接創建這些實例。

使用依賴注入的好處顯而易見,它通過放松模塊間的耦合,來增強系統的可維護性和可測試性。

依賴注入允許我們修改具體實現,而不必改變依賴于它們的依賴類型。

ASP.NET Core 很重視依賴注入技術。ASP.NET Core 中內置的依賴注入提供功能模塊,并不像 StructureMap 和 Ninject 等IoC(控制反轉)容器那樣功能豐富,但它速度快,易于配置,而且易于使用。我們可以使用它在 ASP.NET Core 中注入框架服務和應用程序服務。

關于依賴注入和控制反轉的有關知識可以參考:設計模式。

我們將介紹三種不同方法來解決 ASP.NET Core 6 中的依賴項。

本文中提供的代碼示例均默認運行在 Visual Studio 2022。

1. 使用 VS2022 創建 ASP.NET Core 項目

我們在 Visual Studio 2022 中創建一個 ASP.NET Core 項目。按照以下步驟在 Visual Studio 2022 中創建一個新的 ASP.NET Core Web API 6 項目。

  • 1) 啟動 Visual Studio 2022 IDE。
  • 2) 單擊 “Create new project”。
  • 3) 在 “Create new project” 窗口中,從顯示的模板列表中選擇 “ASP.NET Core Web API”。
  • 4) 點擊下一步。
  • 5) 在 “Configure your new project” 窗口中,指定新項目的名稱和位置。
  • 6) 根據您的偏好,可選擇選中 “Place solution and project in the same directory” 復選框。
  • 7) 點擊下一步。
  • 8) 在接下來顯示的 “Additional Information” 窗口中,從頂部的下拉列表中選擇 .NET 6.0 作為目標框架。將 “Authentication Type” 保留為 “None”(默認)。
  • 9) 確保未選中 “Enable Docker,”、“Configure for HTTPS” 和 “Enable Open API Support” 復選框,因為我們不會在此處使用任何這些功能。您也可以選擇取消選中 “Use controllers(取消選中以使用最少的 API)” 復選框,因為我們將創建自己的控制器。
  • 10) 單擊創建。

這將在 Visual Studio 2022 中創建一個新的 ASP.NET Core 6 Web API 項目。我們將在本文的后續部分中使用該項目來說明解析依賴項。

2. 使用構造函數注入解決依賴關系

現在創建以下接口:

?
1
2
3
4
5
public interface ICustomFileLogger
{
    public string Text { get; set; }
    public void Log(string message);
}

為簡單起見,我們給出一個最小的表示。

CustomFileLogger類實現 ICustomFileLogger接口,代碼如下:

?
1
2
3
4
5
6
7
8
public class CustomFileLogger : ICustomFileLogger
{
    public string Text { get; set; }
    public void Log(string message)
    {
        // 自己的實現邏輯
    }
}

如果使用的是 ASP.NET 5,可以在 ConfigureServices方法中注冊一個 ICustomFileLogger類型的實例作為一個 Scoped服務。如果使用的是 ASP.NET 6,則直接在 Program.cs 文件中注冊。

services.AddScoped<ICustomFileLogger, CustomFileLogger>();

接下來,創建一個名為 DefaultController的 API 控制器并輸入以下代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[Route("api/[controller]")]
[ApiController]
public class DefaultController : ControllerBase
{
    private ICustomFileLogger _logger;
    public DefaultController(ICustomFileLogger logger)
    {
        _logger = logger;
        if(string.IsNullOrEmpty(_logger.Text))
            _logger.Text = DateTime.UtcNow.ToString();
    }
    [HttpGet]
    public string Get()
    {
        return "Hello World!";
    }
}

注意這里是如何使用構造函數注入的。DefaultController類的構造函數接受 ICustomFileLogger類型的實例作為參數。

3. 使用動作方法注入解決依賴關系

當需要在多個方法中使用注入的實例時,我們應該使用構造函數注入。如果只需要在特定的動作方法中使用實例,最好在動作方法中注入實例,而不是使用構造函數注入。

以下代碼片段說明了如何實現動作方法注入。

?
1
2
3
4
5
6
[HttpPost("Log")]
public IActionResult Log([FromServices] ICustomFileLogger customFileLogger)
{
    // 自己的實現邏輯
    return Ok();
}

4. 使用 IServiceProvider 解決依賴關系

我們有時候可能經常需要在控制器中注入許多不同的服務。如果使用構造函數注入,則必須在構造函數中指定多個參數。所以,這種場景下,有一個更好的解決方案,就是使用 IServiceProvider

我們可以使用 IServiceCollection接口來創建依賴項注入容器。一旦創建了容器,IServiceCollection實例就會組合成一個 IServiceProvider實例。我們可以使用此實例來解析服務。

我們可以將 IServiceProvider類型的實例注入到類的任何方法中。您還可以利用 IApplicationBuilder接口的 ApplicationServices屬性和 HttpContext類的 RequestServices屬性來檢索 IServiceProvider實例。

以下代碼說明了如何注入 IServiceProvider類型的實例:

?
1
2
3
4
5
6
7
8
public class DefaultController : Controller
{
    private IServiceProvider _provider;
    public DefaultController(IServiceProvider provider)
    {
        _provider = provider;
    }
}

我們可以在操作方法中使用以下代碼,來檢索需要的任何服務實例。

ICustomFileLogger logger = (ICustomFileLogger)_provider.GetService(typeof(ICustomFileLogger));

注意 IServiceProviderGetService方法是如何用來檢索服務實例的。

我們可以使用 HttpContext類的 RequestServices屬性來檢索 IServiceProvider類型的實例,然后使用該實例調用 GetService方法。

以下代碼展示了HttpContext類如何做到檢索實例:

ICustomFileLogger logger = (ICustomFileLogger)HttpContext.RequestServices.GetService(typeof(ICustomFileLogger));

5. 總結

依賴性注入是一種通過放松耦合來增強代碼維護和可測試性的方法。

我們可以使用 ASP.NET Core 中內置的依賴注入支持來創建模塊化、精簡和干凈的應用程序,同時也使應用程序更容易維護和測試。

參考資料:

1. 設計模式

2. C#教程

到此這篇關于三種方法解決ASP.NET Core 6中的依賴項的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/wanghao72214/p/15591868.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美成人h版在线观看 | 午夜区| 亚洲日本视频 | 国产精品久久久久久久久久免费 | 亚洲h| 日韩精品一区二区三区在线播放 | 精品一区亚洲 | 日韩中文一区二区 | 自拍偷拍欧美 | 91免费观看| 91精品国产综合久久久久久 | 亚洲一二三 | 日本一区二区不卡在线观看 | 91精品国产综合久久久久久漫画 | 欧美精品在线一区 | 在线国产一区二区 | 午夜社区| 中文字幕高清在线播放 | 国内毛片| 国产成人一区 | 一区二区日本 | 黄色电影天堂 | 午夜在线影院 | 一本大道久久精品 | 国产一区二区高清在线 | 欧美精品国产精品 | 亚洲天堂一区在线 | 亚洲国产精品一区二区久久 | 精品视频久久久 | 激情亚洲 | 亚洲国产一区二区三区 | 黄色永久网站 | 久久一二区| 国产精品日本欧美一区二区三区 | 午夜视频在线网站 | 一本一道久久a久久精品综合 | 亚洲精品一区二区三区在线观看 | 中文字幕在线免费 | 在线观看的av | 欧美二区三区视频 | 亚洲国产精品久久久久婷婷老年 |