Невозможно удалить 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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