Been doing some sample code with ASP.NET Core to try to understand how it fits together and I am stumped as to why I am unable to successfully resolve a service.
The configure services method has the call to add ISeedDataService
public void ConfigureServices(IServiceCollection services) { services.AddOptions(); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); services.AddDbContext<CustomerDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); services.AddScoped<ICustomerDbContext, CustomerDbContext>(); services.AddScoped<ICustomerRepository, CustomerRepository>(); services.AddScoped<ISeedDataService, SeedDataService>(); } In Configure I am calling AddSeedData() as below
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.AddSeedData(); } which is calling the extension method below
public static async void AddSeedData(this IApplicationBuilder app) { var seedDataService = app.ApplicationServices.GetRequiredService<ISeedDataService>(); await seedDataService.EnsureSeedData(); } and the SeedDataService is below
public class SeedDataService : ISeedDataService { private ICustomerDbContext _context; public SeedDataService(ICustomerDbContext context) { _context = context; } public async Task EnsureSeedData() { _context.Database.EnsureCreated(); _context.Customers.RemoveRange(_context.Customers); _context.SaveChanges(); Customer customer = new Customer(); customer.FirstName = "Chuck"; customer.LastName = "Norris"; customer.Age = 30; customer.Id = Guid.NewGuid(); _context.Add(customer); Customer customer2 = new Customer(); customer2.FirstName = "Fabian"; customer2.LastName = "Gosebrink"; customer2.Age = 31; customer2.Id = Guid.NewGuid(); _context.Add(customer2); await _context.SaveChangesAsync(); } } Totally unsure as to what I am doing wrong, the error is System.InvalidOperationException: 'Cannot resolve scoped service 'secondapp.Services.ISeedDataService' from root provider.'