.NET依赖注入报错:无法解析ICliente服务以激活HomeController
.NET依赖注入故障排查
报错信息
处理请求时发生未处理的异常。
InvalidOperationException: 尝试激活'Lanchonete.Controllers.HomeController'时,无法解析类型'Lanchonete.Interfaces.ICliente'的服务。
Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, bool isDefaultParameterRequired)
问题根源
你把服务注册代码放在了app.Build()之后,此时依赖注入容器已经完成构建,后续添加的服务不会被纳入容器,导致控制器无法找到ICliente的实现。
修复方案
调整Program.cs中服务注册的位置,将builder.Services.AddTransient<ICliente, ClienteService>();移到var app = builder.Build();之前:
var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllersWithViews(); // 把服务注册移到Build()之前 builder.Services.AddTransient<ICliente, ClienteService>(); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();
原理说明
WebApplication.CreateBuilder负责创建服务容器,所有需要注入的服务必须在调用Build()方法前完成注册——一旦调用Build(),容器就会被锁定,后续的服务注册操作不会对已构建的容器生效,这就是控制器无法解析ICliente的核心原因。
内容的提问来源于stack exchange,提问作者Nat
相关产品推荐
相关产品推荐

