Heim > Backend-Entwicklung > C++ > Warum kann mein ASP.NET Core-Controller aufgrund eines Abhängigkeitsinjektionsfehlers nicht aktiviert werden?

Warum kann mein ASP.NET Core-Controller aufgrund eines Abhängigkeitsinjektionsfehlers nicht aktiviert werden?

Barbara Streisand
Freigeben: 2025-01-23 17:57:15
Original
960 Leute haben es durchsucht

Why is my ASP.NET Core controller failing to activate due to a dependency injection error?

Fehler bei der Abhängigkeitsinjektion beheben: Lösen Sie das Dienstauflösungsproblem, wenn der Controller aktiviert ist

Dependency Injection (DI) ist ein integraler Bestandteil der modernen Softwareentwicklung. Während des DI-Prozesses können jedoch Fehler auftreten, insbesondere wenn der Dienst für die Controller-Aktivierung nicht erfolgreich aufgelöst werden kann.

Fehlermeldung

<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 der DI-Container während der Controller-Aktivierung keine Instanz von BloggerRepository zur Injektion in den BlogController-Konstruktor erstellen konnte.

Problemanalyse

Um die Grundursache zu verstehen, untersuchen wir das bereitgestellte Code-Snippet:

Warehouse-Schnittstelle und Implementierung

<code>public interface IBloggerRepository { ... }

public class BloggerRepository : IBloggerRepository { ... }</code>
Nach dem Login kopieren

Controller

<code>public class BlogController : Controller
{
    private readonly IBloggerRepository _repository;

    public BlogController(BloggerRepository repository)
    //                 ^
    //  问题在此:构造函数请求具体的类
    {
        _repository = repository;
    }

    public IActionResult Index() { ... }
}</code>
Nach dem Login kopieren

Startkonfiguration

<code>public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

    services.AddScoped<IBloggerRepository, BloggerRepository>();
}</code>
Nach dem Login kopieren

Lösung

Das Problem besteht darin, dass der BlogController-Konstruktor die konkrete Klasse BloggerRepository anfordert. Der DI-Container hat jedoch eine Instanz der Schnittstelle IBloggerRepository registriert. Um dies zu beheben, sollte der Controller aktualisiert werden, um Schnittstellen anstelle von konkreten Klassen zu akzeptieren:

<code>public BlogController(IBloggerRepository repository)
//                 ^
//  修复:构造函数接受接口
{
    _repository = repository;
}</code>
Nach dem Login kopieren

Nachdem diese Änderung vorgenommen wurde, kann der DI-Container den Dienst erfolgreich auflösen und eine Instanz von BloggerRepository in den BlogController einfügen.

Andere Hinweise

In seltenen Fällen erfordern bestimmte Objekte möglicherweise spezielle Registrierungstechniken. Wenn beispielsweise der folgende Fehler auftritt:

<code>Unable to resolve service for type 'Microsoft.AspNetCore.Http.IHttpContextAccessor' ...</code>
Nach dem Login kopieren

Solche Abhängigkeiten können mithilfe benutzerdefinierter Erweiterungsmethoden gelöst werden, die von externen Bibliotheken bereitgestellt werden. Spezifische Registrierungsanweisungen finden Sie immer in der Dokumentation der externen Bibliothek.

Das obige ist der detaillierte Inhalt vonWarum kann mein ASP.NET Core-Controller aufgrund eines Abhängigkeitsinjektionsfehlers nicht aktiviert werden?. 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