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
Freigeben: 2025-01-23 17:51:08
Original
171 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage