依存関係挿入エラーのトラブルシューティング: コントローラーがアクティブ化されたときのサービス解決の問題を解決します
依存性注入 (DI) は、現代のソフトウェア開発に不可欠な部分です。ただし、特にコントローラーのアクティブ化のためにサービスを正常に解決できない場合は、DI プロセス中にエラーが発生する可能性があります。
エラーメッセージ
<code>InvalidOperationException: Unable to resolve service for type 'WebApplication1.Data.BloggerRepository' while attempting to activate 'WebApplication1.Controllers.BlogController'.</code>
このエラーは、DI コンテナが、コントローラのアクティブ化中に BlogController コンストラクタに注入するための BloggerRepository のインスタンスを作成できなかったことを示します。
問題分析
根本原因を理解するために、提供されたコード スニペットを調べてみましょう:
ウェアハウスのインターフェースと実装
<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 中国語 Web サイトの他の関連記事を参照してください。