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

如何修复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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 23:35:39