Rumah >pembangunan bahagian belakang >C++ >Mengapa pengawal Teras ASP.NET saya gagal diaktifkan kerana ralat suntikan pergantungan?

Mengapa pengawal Teras ASP.NET saya gagal diaktifkan kerana ralat suntikan pergantungan?

Barbara Streisand
Barbara Streisandasal
2025-01-23 17:57:15963semak imbas

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

Selesaikan masalah ralat suntikan pergantungan: Selesaikan masalah penyelesaian perkhidmatan apabila pengawal diaktifkan

Dependency Injection (DI) ialah bahagian penting dalam pembangunan perisian moden. Walau bagaimanapun, ralat boleh berlaku semasa proses DI, terutamanya jika perkhidmatan tidak dapat diselesaikan dengan jayanya untuk pengaktifan pengawal.

Mesej ralat

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

Ralat ini menunjukkan bahawa bekas DI tidak dapat mencipta contoh BloggerRepository untuk suntikan ke dalam pembina BlogController semasa pengaktifan pengawal.

Analisis Masalah

Untuk memahami punca utama, mari kita periksa coretan kod yang disediakan:

Antara muka dan pelaksanaan gudang

<code>public interface IBloggerRepository { ... }

public class BloggerRepository : IBloggerRepository { ... }</code>

Pengawal

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

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

    public IActionResult Index() { ... }
}</code>

Konfigurasi permulaan

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

    services.AddScoped<IBloggerRepository, BloggerRepository>();
}</code>

Penyelesaian

Masalahnya ialah pembina BlogController meminta kelas konkrit BloggerRepository. Walau bagaimanapun, bekas DI telah mendaftarkan contoh antara muka IBloggerRepository. Untuk membetulkannya, pengawal harus dikemas kini untuk menerima antara muka dan bukannya kelas konkrit:

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

Selepas membuat perubahan ini, bekas DI boleh berjaya menyelesaikan perkhidmatan dan menyuntik contoh BloggerRepository ke dalam BlogController.

Nota lain

Dalam kes yang jarang berlaku, objek tertentu mungkin memerlukan teknik pendaftaran khusus. Contohnya, jika anda menghadapi ralat berikut:

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

Kebergantungan sedemikian boleh diselesaikan menggunakan kaedah sambungan tersuai yang disediakan oleh perpustakaan luaran. Sentiasa rujuk dokumentasi perpustakaan luaran untuk arahan pendaftaran khusus.

Atas ialah kandungan terperinci Mengapa pengawal Teras ASP.NET saya gagal diaktifkan kerana ralat suntikan pergantungan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn