ホームページ >バックエンド開発 >C++ >.NET Core MVC アプリが登録されたサービスをコントローラーに挿入できないのはなぜですか?

.NET Core MVC アプリが登録されたサービスをコントローラーに挿入できないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-23 17:47:09195ブラウズ

Why Does My .NET Core MVC App Fail to Inject a Registered Service into a Controller?

.NET Core MVC アプリケーションでのコントローラーの依存関係注入の失敗に対する解決策

.NET Core MVC アプリケーションで、BloggerRepositoryBlogController に挿入しようとすると、次のメッセージを含むエラーが発生します:

<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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。