Rumah >pembangunan bahagian belakang >C++ >Mengapa Apl MVC Teras .NET Saya Gagal Menyuntik Perkhidmatan Berdaftar ke dalam Pengawal?
Penyelesaian kepada kegagalan suntikan pergantungan pengawal dalam aplikasi .NET Core MVC
Dalam aplikasi .NET Core MVC anda, ralat berlaku apabila cuba menyuntik BloggerRepository
ke dalam BlogController
dengan mesej berikut:
<code>InvalidOperationException: Unable to resolve service for type 'WebApplication1.Data.BloggerRepository' while attempting to activate 'WebApplication1.Controllers.BlogController'.</code>
Mari analisa kod untuk memahami ralat ini:
Tahap gudang:
<code>public interface IBloggerRepository { ... } public class BloggerRepository : IBloggerRepository { ... }</code>
Pengawal:
<code>public class BlogController : Controller { private readonly IBloggerRepository _repository; public BlogController(BloggerRepository repository) { ... } }</code>
Startup.cs:
<code>services.AddScoped<IBloggerRepository, BloggerRepository>();</code>Ralat
menunjukkan bahawa sistem suntikan kebergantungan tidak dapat menyediakan contoh BlogController
untuk pembina BloggerRepository
.
Masalahnya ialah pengawal menjangkakan kelas konkrit untuk BloggerRepository
, manakala bekas suntikan kebergantungan diberitahu untuk mendaftarkan antara muka IBloggerRepository
dengan pelaksanaan konkrit.
Penyelesaian:
Untuk menyelesaikan masalah ini, ubah suai pembina pengawal supaya ia menerima antara muka dan bukannya kelas konkrit:
<code>public BlogController(IBloggerRepository repository) { ... }</code>
Dengan pengubahsuaian ini, bekas suntikan kebergantungan kini boleh berjaya menyelesaikan kebergantungan dan menyediakan contoh IBloggerRepository
yang akan secara automatik dijadikan sebagai BloggerRepository
.
Nota: Pakej yang berbeza mungkin mempunyai cara tersendiri untuk mendaftar perkhidmatan. Adalah disyorkan untuk sentiasa merujuk dokumentasinya untuk panduan khusus.
Atas ialah kandungan terperinci Mengapa Apl MVC Teras .NET Saya Gagal Menyuntik Perkhidmatan Berdaftar ke dalam Pengawal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!