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?
.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:
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!