Конструктор - неоднозначная ошибка. NET Core Web API - PullRequest
0 голосов
/ 07 мая 2020

Я новичок в веб-API. В моем веб-API. NET Core 3.1 я определил 3 конструктора, допускающих перегрузку.

[Route("api/[controller]")]
[ApiController]
public class KipController : ControllerBase
{
    private readonly IConfiguration _configuration;
    private readonly IMapper _mapper;
    private readonly dbLNePMODev1Context _context;
    public KipController(IConfiguration configuration)
    {
        _configuration = configuration;
    }
    public KipController(IMapper mapper)
    {
        _mapper = mapper;
    }

    public KipController(dbLNePMODev1Context context)
    {
        _context = context;
    }
    ......

Но при выполнении приложения выдается следующая ошибка:

System.AggregateException HResult = 0x80131500 Сообщение = Некоторые службы не могут быть созданы (Ошибка при проверке дескриптора службы 'ServiceType: epmoAPI.Models.dbLNePMODev1Context Lifetime: Scoded ImplementationType: epmoAPI.Models.dbLNePMODev1Context': Невозможно активировать тип 'epmoAPI . Следующие конструкторы неоднозначны: Void .ctor (Microsoft.EntityFrameworkCore.DbContextOptions) Void .ctor (Microsoft.EntityFrameworkCore.DbContextOptions 1[epmoAPI.Models.dbLNePMODev1Context])) Source=Microsoft.Extensions.DependencyInjection StackTrace: at Microsoft.Extensions.DependencyInjection.ServiceProvider..ctor(IEnumerable 1 serviceDescriptors, ServiceProviderOptions options) в Microsoft.Extensions.DependencyInjection.ServiceCroviderOptions. параметры) в Microsoft.Extensions.DependencyInjection.DefaultServiceProviderFactory.CreateServiceProvider (I ServiceCollection containerBuilder) в Microsoft.Extensions.Hosting.Internal.ServiceFactoryAdapter`1.CreateServiceProvider (Object containerBuilder) в Microsoft.Extensions.Hosting.HostBuilder.CreateServiceProvider () в Microsoft.Extensions.Hosting.Hosting.HostBuilder () Main (String [] args) в C: \ Projects \ Enterprise PMO \ ePMOHub \ epmoAPI \ Program.cs: строка 16

Это исключение изначально было сгенерировано в этом стеке вызовов: [Внешний код]

Внутреннее исключение 1: InvalidOperationException: Ошибка при проверке дескриптора службы 'ServiceType: epmoAPI.Models.dbLNePMODev1Context Lifetime: Scoped ImplementationType: epmoAPI.Models.dbLNePMODev1Context': epmoAPI.TYPE1. . Следующие конструкторы неоднозначны: Void .ctor (Microsoft.EntityFrameworkCore.DbContextOptions) Void .ctor (Microsoft.EntityFrameworkCore.DbContextOptions`1 [epmoAPI.Models.dbLNePMODev1Context])

* Operation activateException 2: InvalidO введите epmoAPI.Models.dbLNePMODev1Context. Следующие конструкторы неоднозначны: Void .ctor (Microsoft.EntityFrameworkCore.DbContextOptions) Void .ctor (Microsoft.EntityFrameworkCore.DbContextOptions`1 [epmoAPI.Models.dbLNePMODev1Context])

Пожалуйста, помогите мне . Я не понимаю, что не так в моем коде

Ответы [ 2 ]

1 голос
/ 07 мая 2020

Ваш IConfiguration (и, вероятно, IMapper) использует инъекцию зависимостей, а dbLNePMODev1Context - нет. Вот почему ASP. NET Core не может создать его экземпляр.

Более чистое решение:

public KipController(IConfiguration configuration = null, IMapper mapper = null, dbLNePMODev1Context context = null)
{
    _configuration = configuration;
    _mapper = mapper;
    _context = context;
}
0 голосов
/ 07 мая 2020

Если ваш класс dbLNePMODev1Context наследуется от DbContext (если ваш проект использует EntityFrameworkCore), вы можете зарегистрировать dbLNePMODev1Context как DBContext в методе ConfigureServices. Вы можете добавить DbContextOptionsBuilder, чтобы указать тип БД, строку подключения и другие детали.

public void ConfigureServices(IServiceCollection services)
{
...
services.AddDbContext<dbLNePMODev1Context>();
...
}

Если ваш класс dbLNePMODev1Context не использует EntityFramework, вы можете просто зарегистрировать его как службу. Ограниченный, переходный или одиночный. Ссылка

public void ConfigureServices(IServiceCollection services)
{
...
services.AddSingleton(new dbLNePMODev1Context());
...
}

Было бы лучше, если вы поделитесь своим методом ConfigureServices из класса Startup.cs.

...