无法解析 .NET Core 中类型的服务

Jho*_*dez 1 .net c# controller .net-core

我收到此错误:

无法解析类型的服务

我正在 .NET Core 上使用工作单元存储库项目。我在另一层上有一个服务,但我更改为 TestServices,然后我创建了一个服务层,其中是FlightServiceIFlightService

程序

builder.Services.AddDbContext<DataContext>(options =>
    options.UseSqlServer(builder.Configuration
    .GetConnectionString("ConnectionString")));

builder.Services.AddControllers().AddJsonOptions(x =>
                x.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles);

builder.Services.AddTransient<IUnitOfWork, UnitOfWork>();

builder.Services.AddScoped<IFlightRepository, FlightRepository>();

builder.Services.AddControllers();
Run Code Online (Sandbox Code Playgroud)

FlightController

[ApiController]
[Route("Api")]
public class FlightController : Controller
{
        private readonly ILogger<SearchFlightsController> _logger;        
        private readonly IUnitOfWork unitOfWork;
        public readonly IFlightService _flightService;

        public FlightController(ILogger<SearchFlightsController> logger,
            IUnitOfWork unitOfWork,
            IFlightService flightService)
        {
            _logger = logger;            
            this.unitOfWork = unitOfWork;
            _flightService = flightService;
        }

        [HttpGet("GetFlightById/{flightId}")]
        public async Task<IActionResult> GetFlightById(int flightId)
        {
            var details = await _flightService.GetFlightById(flightId);

            if (details != null)
            {
                return Ok(details);
            }
            else
            {
                return BadRequest();
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

错误

System.InvalidOperationException:尝试激活“NewShore.Controllers.FlightController”时无法解析类型“Services.Interfaces.IFlightService”的服务。

在 Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, Boolean isDefaultParameterRequired)
在 lambda_method4(Closure, IServiceProvider, Object[])
在 Microsoft.AspNetCore.Mvc.Controllers.ControllerFactoryProvider.<>c__DisplayClass6_0.g__CreateController |0(ControllerContext controllerContext)
在 Microsoft.AspNetCore.Mvc.Infrastruct.ControllerActionInvoker.Next(State& next, Scope& range, Object& state, Boolean& isCompleted)
在 Microsoft.AspNetCore.Mvc.Infrastruct.ControllerActionInvoker.InvokeInnerFilterAsync()
--- 结束来自先前位置的堆栈跟踪 ---
在 Microsoft.AspNetCore.Mvc.Infrastruct.ResourceInvoker.g__Awaited|20_0(ResourceInvoker 调用程序、任务lastTask、状态下一个、范围范围、对象状态、布尔值 isCompleted)
在 Microsoft.AspNetCore.Mvc.Infrastruct。 ResourceInvoker.g__Awaited|17_0(ResourceInvoker 调用程序、任务任务、IDisposable 范围)
位于 Microsoft.AspNetCore.Mvc.Infrastruct.ResourceInvoker.g__Awaited|17_0(ResourceInvoker 调用程序、任务任务、IDisposable 范围)
位于 Microsoft.AspNetCore.Routing.EndpointMiddleware.g__AwaitRequestTask| 6_0(端点端点、任务 requestTask、ILogger 记录器)
位于 Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext 上下文)
位于 Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext)
位于 Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke( HttpContext httpContext,ISwaggerProvider swaggerProvider)
位于 Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(HttpContext context)

我读了一些帖子,我尝试更改为AddScoped两者,AddTransient对于IFlightRepository. 我看到了命令或命令Program.cs,但一切似乎都正常。

你能纠正我吗?

小智 5

您将 IFlightService 注入到 FlightController 中,但未注册此依赖项。错误消息告诉您无法解决 FlightController 中的依赖关系。

将此行添加到 Program.cs

builder.Services.AddTransient<IFlightService, FligtService>();
Run Code Online (Sandbox Code Playgroud)