.NET Core MVC アプリケーションでのコントローラーの依存関係注入の失敗に対する解決策
.NET Core MVC アプリケーションで、BloggerRepository
を BlogController
に挿入しようとすると、次のメッセージを含むエラーが発生します:
<code>InvalidOperationException: Unable to resolve service for type 'WebApplication1.Data.BloggerRepository' while attempting to activate 'WebApplication1.Controllers.BlogController'.</code>
このエラーを理解するためにコードを分析してみましょう:
倉庫レベル:
<code>public interface IBloggerRepository { ... } public class BloggerRepository : IBloggerRepository { ... }</code>
コントローラー:
<code>public class BlogController : Controller { private readonly IBloggerRepository _repository; public BlogController(BloggerRepository repository) { ... } }</code>
Startup.cs:
<code>services.AddScoped<IBloggerRepository, BloggerRepository>();</code>
エラーは、依存関係注入システムが BlogController
コンストラクターに BloggerRepository
インスタンスを提供できないことを示します。
問題は、コントローラーが BloggerRepository
の具象クラスを予期しているのに対し、依存関係注入コンテナーはインターフェイス IBloggerRepository
を具象実装に登録するように指示されていることです。
解決策:
この問題を解決するには、具体的なクラスの代わりにインターフェイスを受け入れるようにコントローラーのコンストラクターを変更します。
<code>public BlogController(IBloggerRepository repository) { ... }</code>
この変更により、依存関係注入コンテナーは依存関係を正常に解決し、IBloggerRepository
として自動的にインスタンス化される BloggerRepository
のインスタンスを提供できるようになりました。
注: パッケージによっては、サービスを登録する独自の方法がある場合があります。具体的なガイダンスについては、常にドキュメントを参照することをお勧めします。
以上が.NET Core MVC アプリが登録されたサービスをコントローラーに挿入できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。