首頁 > 後端開發 > C++ > 為什麼我的 ASP.NET Core 控制器由於依賴項注入錯誤而無法啟動?

為什麼我的 ASP.NET Core 控制器由於依賴項注入錯誤而無法啟動?

Barbara Streisand
發布: 2025-01-23 17:57:15
原創
960 人瀏覽過

Why is my ASP.NET Core controller failing to activate due to a dependency injection error?

排查依賴注入錯誤:解決控制器啟動時的服務解析問題

依賴注入 (DI) 是現代軟體開發中不可或缺的一部分。然而,在 DI 過程中可能會出現錯誤,尤其是在無法成功解析服務以進行控制器啟動時。

錯誤訊息

<code>InvalidOperationException: Unable to resolve service for type 'WebApplication1.Data.BloggerRepository' while attempting to activate 'WebApplication1.Controllers.BlogController'.</code>
登入後複製

此錯誤表明,在控制器啟動期間,DI 容器無法建立 BloggerRepository 的實例以注入到 BlogController 建構函數中。

問題分析

為了理解根本原因,讓我們檢查提供的程式碼片段:

倉儲介面與實作

<code>public interface IBloggerRepository { ... }

public class BloggerRepository : IBloggerRepository { ... }</code>
登入後複製

控制器

<code>public class BlogController : Controller
{
    private readonly IBloggerRepository _repository;

    public BlogController(BloggerRepository repository)
    //                 ^
    //  问题在此:构造函数请求具体的类
    {
        _repository = repository;
    }

    public IActionResult Index() { ... }
}</code>
登入後複製

啟動設定

<code>public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

    services.AddScoped<IBloggerRepository, BloggerRepository>();
}</code>
登入後複製

問題在於 BlogController 建構子請求的是具體的類別 BloggerRepository。但是,DI 容器已註冊了介面 IBloggerRepository 的實例。為了解決這個問題,應該將控制器更新為接受介面而不是具體的類別:

<code>public BlogController(IBloggerRepository repository)
//                 ^
//  修复:构造函数接受接口
{
    _repository = repository;
}</code>
登入後複製

進行此變更後,DI 容器可以成功解析服務並將 BloggerRepository 的實例注入到 BlogController 中。

其他注意事項

在極少數情況下,某些物件可能需要特定的註冊技術。例如,如果遇到以下錯誤:

<code>Unable to resolve service for type 'Microsoft.AspNetCore.Http.IHttpContextAccessor' ...</code>
登入後複製

可以使用外部函式庫提供的自訂擴充方法來解決此類相依性。請務必查閱外部庫的文檔以取得具體的註冊說明。

以上是為什麼我的 ASP.NET Core 控制器由於依賴項注入錯誤而無法啟動?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板