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
Lepaskan: 2025-01-23 17:57:15
asal
1013 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

Pengawal

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

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

    public IActionResult Index() { ... }
}</code>
Salin selepas log masuk

Konfigurasi permulaan

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

    services.AddScoped<IBloggerRepository, BloggerRepository>();
}</code>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan