You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 17:23:20