Невозможно удалить DBContext из DIC#

Место общения программистов C#
Anonymous
Невозможно удалить DBContext из DI

Сообщение Anonymous »

Я пишу интеграционные тесты XUnit для своего веб-API ASP.NET Core. Я переконфигурирую свое приложение в CustomWebApplicationFactory, чтобы заменить исходный DbContext на EFCore InMemoryDataBase следующим образом:

Код: Выделить всё

protected override void ConfigureWebHost(IWebHostBuilder builder)
{
builder.ConfigureServices(services =>
{
var context = services.FirstOrDefault(descriptor => descriptor.ServiceType == typeof(DartsDbContext));

if (context != null)
{
services.Remove(context);
var options = services.Where(r => (r.ServiceType == typeof(DbContextOptions))
|| (r.ServiceType.IsGenericType && r.ServiceType.GetGenericTypeDefinition() == typeof(DbContextOptions))).ToArray();

foreach (var option in options)
{
services.Remove(option);
}
}

services.AddDbContext(options =>
{
options.UseInMemoryDatabase("InMemoryDbForTesting");
});
});
}
Я получаю следующую ошибку:

Произошла одна или несколько ошибок. (Службы для поставщиков баз данных «Npgsql.EntityFrameworkCore.PostgreSQL», «Microsoft.EntityFrameworkCore.InMemory» зарегистрированы у поставщика услуг. Только один поставщик баз данных может быть зарегистрирован у поставщика услуг.

Если я удалю строку кода в файле Program.cs, которая добавляет исходный DbContext, это будет работать, потому что только один DbContext существует.
Я хочу сохранить исходное внедрение DbContext в Program.cs и хочу, чтобы CustomWebApplicationFactory заменил его только для тестов.

Подробнее здесь: https://stackoverflow.com/questions/794 ... xt-from-di

Вернуться в «C#»