如何修复ASP.NET Core Web API中的‘Unable to resolve service for type’错误?
解决ASP.NET Core中“Unable to resolve service for type”依赖注入错误
你遇到的依赖注入解析错误,核心原因是重复定义了ITrainService接口,且两个接口分属不同命名空间:
- 在
TrainController.cs的TicketBookingService.Controllers命名空间下,定义了带Create方法的ITrainService - 在
TrainService.cs的TicketBookingService.Services命名空间下,定义了一个空的ITrainService - 而你在
Program.cs中注册的是Services命名空间下的空接口,但控制器构造函数依赖的是Controllers命名空间下的接口,DI容器无法匹配,导致解析失败。
修复步骤
1. 移除控制器内的接口定义
打开TrainController.cs,删除类内部的ITrainService接口定义,同时添加对TicketBookingService.Services命名空间的引用:
using Microsoft.AspNetCore.Mvc; using TicketBookingService.Models; // 添加这行引用 using TicketBookingService.Services; namespace TicketBookingService.Controllers { [Route("api/trains")] [ApiController] public class TrainController : ControllerBase { private readonly ITrainService _trainService; public TrainController(ITrainService trainService) { _trainService = trainService; } [HttpPost] public IActionResult CreateTrain(Train train) { var createdTrain = _trainService.Create(train); return Ok(createdTrain); } // 移除这里的ITrainService接口定义 } }
2. 完善Services中的接口定义
打开TrainService.cs,给ITrainService接口添加Create方法,确保接口和实现类的契约一致:
using MongoDB.Driver; using TicketBookingService.Models; namespace TicketBookingService.Services { public class TrainService : ITrainService { private readonly IMongoCollection<Train> _trainCollection; public TrainService(IConfiguration config) { var client = new MongoClient(config.GetConnectionString("TicketBookingApp")); var database = client.GetDatabase("TrainBookingDB"); _trainCollection = database.GetCollection<Train>("trains"); } public Train Create(Train train) { _trainCollection.InsertOne(train); return train; } } // 完善接口,添加Create方法 public interface ITrainService { Train Create(Train train); } }
3. 修正请求体的id问题
你的请求体中"id": {}是无效格式,MongoDB的ObjectId不需要手动传入(通常模型中会配置自动生成),建议修改请求体为:
{ "trainName": "Udarata Manike", "trainNumber": "01" }
内容的提问来源于stack exchange,提问作者Saduni
相关产品推荐
相关产品推荐

