最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ASP.NET Core中的依賴問題解決方法示例

 更新時間:2023年08月16日 11:58:26   作者:編程寶庫  
這篇文章主要為大家介紹了ASP.NET Core中的依賴問題解決方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

如何解決 ASP.NET Core 中的依賴問題

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

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

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

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

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

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

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

1. 使用 VS2022 創(chuàng)建 ASP.NET Core 項目

我們在 Visual Studio 2022 中創(chuàng)建一個 ASP.NET Core 項目。按照以下步驟在 Visual Studio 2022 中創(chuàng)建一個新的 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) 根據(jù)您的偏好,可選擇選中 “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)” 復選框,因為我們將創(chuàng)建自己的控制器。
  • 10) 單擊創(chuàng)建。
    這將在 Visual Studio 2022 中創(chuàng)建一個新的 ASP.NET Core 6 Web API 項目。我們將在本文的后續(xù)部分中使用該項目來說明解析依賴項。

2. 使用構(gòu)造函數(shù)注入解決依賴關系

現(xiàn)在創(chuàng)建以下接口:

public interface ICustomFileLogger
{
    public string Text { get; set; }
    public void Log(string message);
}

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

CustomFileLogger 類實現(xiàn) ICustomFileLogger 接口,代碼如下:

public class CustomFileLogger : ICustomFileLogger
{
    public string Text { get; set; }
    public void Log(string message)
    {
        // 自己的實現(xiàn)邏輯
    }
}

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

services.AddScoped<ICustomFileLogger, CustomFileLogger>();
接下來,創(chuàng)建一個名為 DefaultController 的 API 控制器并輸入以下代碼:

[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!";
    }
}

注意這里是如何使用構(gòu)造函數(shù)注入的。DefaultController 類的構(gòu)造函數(shù)接受 ICustomFileLogger 類型的實例作為參數(shù)。

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

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

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

[HttpPost("Log")]
public IActionResult Log([FromServices] ICustomFileLogger customFileLogger)
{
    // 自己的實現(xiàn)邏輯
    return Ok();
}

4. 使用 IServiceProvider 解決依賴關系

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

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

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

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

public class DefaultController : Controller
{
    private IServiceProvider _provider;
    public DefaultController(IServiceProvider provider)
    {
        _provider = provider;
    }
}

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

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

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

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

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

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

總結(jié)

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

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

參考資料:

以上就是ASP.NET Core中的依賴問題解決方法示例的詳細內(nèi)容,更多關于ASP.NET Core依賴解決的資料請關注腳本之家其它相關文章!

相關文章

  • ASP.NET中高質(zhì)量縮略圖的生成代碼

    ASP.NET中高質(zhì)量縮略圖的生成代碼

    ASP.NET中高質(zhì)量縮略圖的生成代碼...
    2007-09-09
  • Visual Studio 2017 IDE安裝使用圖文教程

    Visual Studio 2017 IDE安裝使用圖文教程

    這篇文章主要為大家詳細介紹了Visual Studio 2017 IDE安裝使用圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • ASP.NET MVC3的偽靜態(tài)實現(xiàn)代碼

    ASP.NET MVC3的偽靜態(tài)實現(xiàn)代碼

    最近使用asp.net MVC3開發(fā)B2C電子商務系統(tǒng),為了SEO的優(yōu)化工作,需要通過路由實現(xiàn)偽靜態(tài)URL,后續(xù)再根據(jù)需要生成真正的靜態(tài)頁面,不直接走路由訪問具體的頁面
    2011-12-12
  • 詳解.NET?Core如何構(gòu)建一個彈性的HTTP請求機制

    詳解.NET?Core如何構(gòu)建一個彈性的HTTP請求機制

    在分布式系統(tǒng)中,服務間的依賴關系復雜,任何一個服務的故障都可能導致整個系統(tǒng)的不可用,這時彈性?HTTP?請求機制就可以幫助我們,下面我們就來看看.NET?Core如何構(gòu)建一個彈性的HTTP請求機制吧
    2025-01-01
  • DataTable多列合并問題輕松搞定

    DataTable多列合并問題輕松搞定

    由于題庫的表結(jié)構(gòu)不相同,導致同樣的Gridview在顯示時不能同時兩種不同結(jié)構(gòu)的數(shù)據(jù),這時如何在這個固定的GridView中顯示不同的數(shù)據(jù)呢,感興趣的朋友可以看下本文的解決方法
    2013-04-04
  • ASP.NET 使用application與session對象寫的簡單聊天室程序

    ASP.NET 使用application與session對象寫的簡單聊天室程序

    寫了快一年的asp.net,application對象還真沒怎么用過??戳丝磿鶕?jù)這兩個對象的特性寫了一個簡單的聊天室程序。真的是非常的簡陋
    2014-07-07
  • EF?Core基礎入門教程

    EF?Core基礎入門教程

    這篇文章介紹了EF?Core的基礎入門教程,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • asp.net UrlReWriter使用經(jīng)驗小結(jié)

    asp.net UrlReWriter使用經(jīng)驗小結(jié)

    UrlRewriter 是微軟封裝好了的一個URL重寫組件。使用它可以讓我節(jié)約很多自已開發(fā)的時間。 好了,開始講述我的應用經(jīng)驗,這只是很菜鳥的經(jīng)驗,高手就不用看了。
    2008-11-11
  • asp. net下使用foreach簡化文本文件的訪問。

    asp. net下使用foreach簡化文本文件的訪問。

    asp. net下使用foreach簡化文本文件的訪問。...
    2007-04-04
  • [譯]ASP.NET Core 2.0 網(wǎng)址重定向的方法

    [譯]ASP.NET Core 2.0 網(wǎng)址重定向的方法

    本篇文章主要介紹了[譯]ASP.NET Core 2.0 網(wǎng)址重定向的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10

最新評論

博罗县| 大化| 宜川县| 囊谦县| 南丹县| 平阴县| 观塘区| 抚远县| 抚州市| 茂名市| 澄迈县| 万宁市| 德昌县| 弥勒县| 黄大仙区| 木兰县| 巩义市| 福清市| 泸州市| 贵州省| 梧州市| 惠来县| 武穴市| 肇源县| 大名县| 永善县| 达州市| 永福县| 南汇区| 拉萨市| 防城港市| 怀宁县| 巍山| 策勒县| 金溪县| 静海县| 广南县| 岱山县| 林周县| 锡林郭勒盟| 新邵县|