I am trying my hand at .net core web api. I have created a static method for registering my controllers like this:
public static class RegistrationExtensions
{
public static void RegisterApplicationServices(this IServiceCollection services, IServiceProvider serviceProvider)
{
services.RegisterSingletons();
services.RegisterRequests();
services.RegisterTransient(serviceProvider);
}
public static void RegisterSingletons(this IServiceCollection services)
{
services.AddSingleton<Configuration>();
}
public static void RegisterRequests(this IServiceCollection services)
{
services.AddScoped<ISettingsService, SettingsService>();
}
public static void RegisterTransient(this IServiceCollection services, IServiceProvider serviceProvider)
{
var config = serviceProvider.GetService<Configuration>();
services.AddDbContext<InteractiveChoicesContext>(m => m.UseSqlServer(config.ConnectionString));
}
}
As you can see, I want to resolve my Configuration class which contains my ConnectionString, which I pass into the DbContext. Do resolve the Configuration I was trying to use IServiceProvider which is injected into the RegisterApplicationServices method.
To invoke this method, I changed the Startup class's ConfigureServices to this:
public void ConfigureServices(IServiceCollection services, IServiceProvider serviceProvider)
{
services.AddMvc();
services.RegisterApplicationServices(serviceProvider);
}
But when I run my application, I get an error:
The ConfigureServices method must either be parameterless or take only one parameter of type IServiceCollection.
The error is obvious. My question is: How can I resolve the Configuration class in my RegisterTransient method?