Мне известно, что причина описанной ниже ошибки заключается в том, что мне нужна область действия для создания экземпляра службы, что может быть выполнено с помощью Services.CreateScope()
и сопоставления .Dispose()
/ using
. Вопрос в том, почему у меня разное поведение в средах разработки и производства.
У меня есть консольное приложение. NET Core 3.1, которое использует . NET Generi c Host для внедрения зависимостей. Внутри него у меня есть EF Core DbContext, определенный как ограниченная служба для доступа к базе данных с использованием AddDbContext
, как показано ниже:
var host = Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
var configuration = hostContext.Configuration;
services
.AddDbContext<BotDbContext>(options =>
{
options
.UseLazyLoadingProxies()
.UseSqlite(configuration.GetConnectionString("Database"));
});
});
var db = host.Services.GetRequiredService<BotDbContext>();
Первоначально я тестировал это в среде (DOTNET_ENVIRONMENT
) как Production
по умолчанию. Все работало.
Я хотел отдельную Development
среду, чтобы приблизить mimi c стандартные ASP. NET основные шаблоны. Для этого я определил переменную среды времени отладки DOTNET_ENVIRONMENT=Development
.
Как только я это сделал, я получил следующее исключение:
System.InvalidOperationException: 'Cannot разрешить службу с ограниченной областью действия «MyNamespace.Data.BotDbContext» от поставщика root.
Почему это исключение возникает только в том случае, если среда Development
, но не Production
?