ホームページ >バックエンド開発 >C++ >依存関係の挿入を使用すると、.NET Core MVC アプリで「サービスを解決できません」というメッセージが表示されるのはなぜですか?

依存関係の挿入を使用すると、.NET Core MVC アプリで「サービスを解決できません」というメッセージが表示されるのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-23 17:51:08137ブラウズ

Why Does My .NET Core MVC App Throw

.NET Core MVC アプリが依存関係挿入エラーをスローします: アクティブ化中にサービス タイプを解決できません

.NET Core MVC アプリケーションで依存関係の挿入とウェアハウス パターンを実装すると、次のエラーが発生する可能性があります:

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

このエラーは、アプリケーションが BloggerRepository の依存関係を解決できないため、BlogController インスタンスを作成できないことを示します。

問題分析

次のコンポーネントが関係します:

  • リポジトリ: IBloggerRepository インターフェイスとその実装 BloggerRepository。
  • コントローラー: BloggerRepository を使用する BlogController。
  • Startup.cs: 依存関係注入サービスの構成を登録します。

Startup.cs ファイルで、IBloggerRepository の依存関係を登録しました:

<code class="language-csharp">services.AddScoped<IBloggerRepository, BloggerRepository>();</code>

これは、アプリケーションが IBloggerRepository を必要とするたびに、BloggerRepository インスタンスを作成してそれを注入することを意味します。

ただし、BlogController はコンストラクターで具体的な BloggerRepository クラスを直接リクエストします。

<code class="language-csharp">public BlogController(BloggerRepository repository)</code>

これにより、インターフェイスが要求されたときに具象クラスのインスタンスを作成する方法がわからないため、依存関係注入コンテナーが失敗します。

解決策

この問題を解決するには、IBloggerRepository インターフェイスを受け入れるように BlogController のコンストラクターを変更します。

<code class="language-csharp">public BlogController(IBloggerRepository repository)</code>

インターフェイスを受け入れることで、依存関係注入コンテナーは依存関係を正常に解決し、BlogController インスタンスを作成できるようになります。

その他の指示

場合によっては、特定のタイプに対してカスタム登録方法を使用する必要がある場合があります。たとえば、IHttpContextAccessor サービスを登録するには、次を使用します:

<code class="language-csharp">services.AddHttpContextAccessor();</code>

カスタム登録が必要かどうかを判断するには、常に外部 NuGet パッケージのドキュメントを参照してください。

以上が依存関係の挿入を使用すると、.NET Core MVC アプリで「サービスを解決できません」というメッセージが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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