1

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>();
    ...
  }
}
Miguel Moura
  • 36,732
  • 85
  • 259
  • 481

0 Answers0