On an ASP.NET Core project I have the following on Startup's ConfigureServices method:
public void ConfigureServices(IServiceCollection services) {
...
services.AddLiteDatabase<Database>(connectionString);
...
}
And on Startup's Configure method:
public void Configure(IApplicationBuilder application, IWebHostEnvironment environment) {
...
application.UseLiteDatabase<DatabaseConfiguration>();
...
}
UserLiteDatabase
calls the method Configure
on DatabaseConfiguration
which has:
IWebHostEnvironment environment = provider.GetService<IWebHostEnvironment>();
Database database = provider.GetService<Database>();
I am able to get IWebHostEnvironment but I get the error when getting database:
Cannot resolve scoped service 'Database' from root provider.'
What am I missing?
Remaining Code
On the method AddLiteDatabase
I have:
public static void AddLiteDatabase<T>(this IServiceCollection services, String connectionString) where T : LiteDatabase {
T database = (T)Activator.CreateInstance(typeof(T), new Object[] { connectionString });
services.AddScoped<T>(x => database);
}
And the method UseLiteDatabase
has:
public static void UseLiteDatabase<T>(this IApplicationBuilder builder) where T : IDatabaseConfiguration<LiteDatabase> {
T configuration = (T)Activator.CreateInstance(typeof(T), new Object[] { builder });
configuration.Configure();
}
And the other classes are:
public interface IDatabaseConfiguration<T> where T : LiteDatabase {
void Configure();
}
public class Database : LiteDatabase {
public Database(String connection) : base (connection) { }
}
public class DatabaseConfiguration : IDatabaseConfiguration<LiteDatabase> {
private readonly IApplicationBuilder _builder;
public DatabaseConfiguration(IApplicationBuilder builder) {
_builder = builder;
}
public void Configure() {
IServiceProvider provider = _builder.ApplicationServices;
IWebHostEnvironment environment = provider.GetService<IWebHostEnvironment>();
Database database = provider.GetService<Database>();
...
}
}