Rumah >pembangunan bahagian belakang >C++ >Mengapa pengawal Teras ASP.NET saya gagal diaktifkan kerana ralat suntikan pergantungan?
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!