Heim >Backend-Entwicklung >C++ >Warum gibt meine .NET Core MVC-App bei Verwendung der Abhängigkeitsinjektion die Fehlermeldung „Dienst kann nicht aufgelöst werden' aus?

Warum gibt meine .NET Core MVC-App bei Verwendung der Abhängigkeitsinjektion die Fehlermeldung „Dienst kann nicht aufgelöst werden' aus?

Barbara Streisand
Barbara StreisandOriginal
2025-01-23 17:51:08137Durchsuche

Why Does My .NET Core MVC App Throw

.NET Core MVC-App löst Abhängigkeitsinjektionsfehler aus: Der Diensttyp konnte während der Aktivierung nicht aufgelöst werden

Beim Implementieren von Abhängigkeitsinjektions- und Warehousing-Mustern in .NET Core MVC-Anwendungen können die folgenden Fehler auftreten:

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

Dieser Fehler weist darauf hin, dass die Anwendung keine BlogController-Instanz erstellen kann, da sie die Abhängigkeiten des BloggerRepository nicht auflösen kann.

Problemanalyse

Folgende Komponenten sind beteiligt: ​​

  • Repository: IBloggerRepository-Schnittstelle und ihre Implementierung BloggerRepository.
  • Controller: BlogController unter Verwendung von BloggerRepository.
  • Startup.cs: Registrieren Sie die Konfiguration des Abhängigkeitsinjektionsdienstes.

In der Datei Startup.cs haben Sie die Abhängigkeit von IBloggerRepository registriert:

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

Das bedeutet, dass eine Anwendung immer dann, wenn sie ein IBloggerRepository benötigt, eine BloggerRepository-Instanz erstellt und diese einfügt.

BlogController fordert jedoch direkt die konkrete BloggerRepository-Klasse in seinem Konstruktor an:

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

Dies führt dazu, dass der Abhängigkeitsinjektionscontainer fehlschlägt, da er nicht weiß, wie er eine Instanz der konkreten Klasse erstellen soll, wenn seine Schnittstelle angefordert wird.

Lösung

Um dieses Problem zu beheben, ändern Sie den Konstruktor des BlogControllers so, dass er die IBloggerRepository-Schnittstelle akzeptiert:

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

Durch das Akzeptieren der Schnittstelle kann der Abhängigkeitsinjektionscontainer nun erfolgreich Abhängigkeiten auflösen und BlogController-Instanzen erstellen.

Weitere Anweisungen

In manchen Fällen kann es notwendig sein, für bestimmte Typen benutzerdefinierte Registrierungsmethoden zu verwenden. Um beispielsweise den IHttpContextAccessor-Dienst zu registrieren, würden Sie Folgendes verwenden:

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

Konsultieren Sie immer die Dokumentation für externe NuGet-Pakete, um festzustellen, ob eine benutzerdefinierte Registrierung erforderlich ist.

Das obige ist der detaillierte Inhalt vonWarum gibt meine .NET Core MVC-App bei Verwendung der Abhängigkeitsinjektion die Fehlermeldung „Dienst kann nicht aufgelöst werden' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn