I'm new to Web API. In my .NET Core 3.1 web api I have defined 3 constructors beleiving overloading.
[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;
}
......
But when executing the application it says the following error
System.AggregateException HResult=0x80131500 Message=Some services are not able to be constructed (Error while validating the service descriptor 'ServiceType: epmoAPI.Models.dbLNePMODev1Context Lifetime: Scoped ImplementationType: epmoAPI.Models.dbLNePMODev1Context': Unable to activate type 'epmoAPI.Models.dbLNePMODev1Context'. The following constructors are ambiguous: 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) at Microsoft.Extensions.DependencyInjection.ServiceCollectionContainerBuilderExtensions.BuildServiceProvider(IServiceCollection services, ServiceProviderOptions options) at Microsoft.Extensions.DependencyInjection.DefaultServiceProviderFactory.CreateServiceProvider(IServiceCollection containerBuilder) at Microsoft.Extensions.Hosting.Internal.ServiceFactoryAdapter`1.CreateServiceProvider(Object containerBuilder) at Microsoft.Extensions.Hosting.HostBuilder.CreateServiceProvider() at Microsoft.Extensions.Hosting.HostBuilder.Build() at epmoAPI.Program.Main(String[] args) in C:\Projects\Enterprise PMO\ePMOHub\epmoAPI\Program.cs:line 16This exception was originally thrown at this call stack: [External Code]
Inner Exception 1: InvalidOperationException: Error while validating the service descriptor 'ServiceType: epmoAPI.Models.dbLNePMODev1Context Lifetime: Scoped ImplementationType: epmoAPI.Models.dbLNePMODev1Context': Unable to activate type 'epmoAPI.Models.dbLNePMODev1Context'. The following constructors are ambiguous: Void .ctor(Microsoft.EntityFrameworkCore.DbContextOptions) Void .ctor(Microsoft.EntityFrameworkCore.DbContextOptions`1[epmoAPI.Models.dbLNePMODev1Context])
Inner Exception 2: InvalidOperationException: Unable to activate type 'epmoAPI.Models.dbLNePMODev1Context'. The following constructors are ambiguous: Void .ctor(Microsoft.EntityFrameworkCore.DbContextOptions) Void .ctor(Microsoft.EntityFrameworkCore.DbContextOptions`1[epmoAPI.Models.dbLNePMODev1Context])
Please help me. I am not getting an idea whats wrong in my code
Your IConfiguration
(and probably IMapper
) use dependency injection, while dbLNePMODev1Context
does not. That's why ASP.NET Core can't instantiate it.
A cleaner solution:
public KipController(IConfiguration configuration = null, IMapper mapper = null, dbLNePMODev1Context context = null)
{
_configuration = configuration;
_mapper = mapper;
_context = context;
}
If your dbLNePMODev1Context
class inherits from DbContext
(If your project uses EntityFrameworkCore) then you can register dbLNePMODev1Context
as a DBContext
in ConfigureServices
method. You can add DbContextOptionsBuilder
to indicate type of DB, Connection String and other details.
public void ConfigureServices(IServiceCollection services)
{
...
services.AddDbContext<dbLNePMODev1Context>();
...
}
If your dbLNePMODev1Context
class does not use EntityFramework then you can just register it as a service .Please decide on Scoped,Transient or Singleton. Reference
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSingleton(new dbLNePMODev1Context());
...
}
It would give a better idea if you share your ConfigureServices
method from Startup.cs
class.
User contributions licensed under CC BY-SA 3.0