Я получаю эту ошибку:
Не удалось разрешить службу для типа
Я использую проект репозитория единиц работы в .NET Core. У меня были службы на другом слое, но я перешел на TestServices, затем создал слой служб, где находятся FlightService
и IFlightService
.
Программа
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();
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();
}
}
}
Ошибка
System.InvalidOperationException: невозможно разрешить службу для типа «Services.Interfaces.IFlightService» при попытке активировать «NewShore.Controllers.FlightController».
в Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService (IServiceProvider sp, Type type, Type requiredBy, Boolean isDefaultParameterRequired)
at lambda_method4 (закрытие, IServiceProvider, объект [])
в Microsoft.AspNetCore.Mvc.Controllers.ControllerFactoryProvider.<>c__DisplayClass6_0.g__CreateController|0(ControllerContext controllerContext)
в Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next (состояние и следующее, область действия и область действия, объект и состояние, логическое значение и завершено)
в Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
--- Конец трассировки стека из предыдущего места ---
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|20_0 (вызывающий ResourceInvoker, задача lastTask, состояние следующее, область действия, состояние объекта, логическое значение isCompleted)
в Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0 (вызов ResourceInvoker, задача Task, область IDisposable)
в Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0 (вызов ResourceInvoker, задача Task, область IDisposable)
в Microsoft.AspNetCore.Routing.EndpointMiddleware.g__AwaitRequestTask|6_0 (конечная точка, Task 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)
Я прочитал некоторые сообщения, я попытался изменить на AddScoped
оба, AddTransient
на IFlightRepository
. Я видел заказ или команды на Program.cs
, но вроде все в порядке.
Не могли бы вы исправить меня?
Добавлена информация об ошибке.
Вы добавляете IFlightRepository
, но не IFlightService
, который используется в вашем контроллере. И вот что говорит вам ошибка: приложение не знает о IFlightService
, которое вы хотите использовать в своем контроллере, поскольку вы не добавили службу в свой запуск. Обновлено: @riktus был быстрее меня :). Проверьте его ответ
Вы внедрили IFlightService в FlightController, но не зарегистрировали эту зависимость. Сообщение об ошибке сообщает вам, что зависимость в FlightController не может быть разрешена.
Добавьте эту строку в Program.cs
builder.Services.AddTransient<IFlightService, FligtService>();
FightService и FlightRepository... они похожи, спасибо, ребята.
Пожалуйста, опубликуйте сообщение об ошибке, включая Stacktrace.