ASP.NET Core Web API依赖注入异常:已注入仍无法解析服务
解决ASP.NET Core Web API中"Unable to resolve service for type"异常
核心问题1:控制器依赖实现类而非接口
你在Program.cs里注册的是接口IXFer与实现类XFerRepository的映射,但XFerController的构造函数直接依赖XFerRepository类型——DI容器无法直接解析该实现类的实例(仅注册接口与实现的关联,未单独注册实现类本身)。
修复方案(推荐):控制器依赖接口
修改XFerController代码,将依赖改为接口IXFer:
[Route("api/[controller]")] [ApiController] public class XFerController : ControllerBase { private readonly IXFer _transactionRepository; public XFerController(IXFer transactionRepository) { _transactionRepository = transactionRepository; } [HttpGet] public async Task<IActionResult> GetTransactions() { var transactions = await _transactionRepository.GetAllAsync(); var response = new List<XFer>(); foreach (var transaction in transactions) { response.Add(new XFer { id = transaction.id, transactionType = transaction.transactionType, amount = transaction.amount, transactionDate = transaction.transactionDate }); } return Ok(response); } }
核心问题2:检查DbContext是否注册
XFerRepository的构造函数依赖dbContext,若Program.cs中未注册该DbContext,DI容器同样会抛出无法解析服务的异常。需确保Program.cs中有类似以下的注册代码:
builder.Services.AddDbContext<dbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("YourConnectionString")));
(根据你使用的数据库类型替换UseSqlServer,比如UseSqlite、UseNpgsql等)
额外验证点
- 确认
IXFer、XFerRepository、dbContext所在命名空间已正确引用,无拼写错误 - 确认
Program.cs中的注册代码在builder.Build()之前执行
内容的提问来源于stack exchange,提问作者Lazy Llama Games
相关产品推荐
相关产品推荐

