Как внедрить / получить IHostingEnvironment в IDesignTimeDbContextFactory? - PullRequest
0 голосов
/ 24 сентября 2019

Осмотреться кажется невозможным, но это действительно так?

Основная цель - понять, является ли среда разработкой или производством, поэтому я могу передать соответствующую строку подключения из файла конфигурации.

Вот мой текущий код IDesignTimeDbContextFactory:

public class ApplicationContextFactory : IDesignTimeDbContextFactory<AppDbContext>
{
    private IConfiguration Configuration { get; }

    public ApplicationContextFactory()
    {
        var projectPath = AppDomain.CurrentDomain.BaseDirectory.Split(new string[] { $@"bin{Path.DirectorySeparatorChar}" }, StringSplitOptions.None)[0];
        Configuration = new ConfigurationBuilder()
                .SetBasePath(projectPath)
                .AddJsonFile("appsettings.json")
                .Build();
    }

    public AppDbContext CreateDbContext(string[] args)
    {
        var optionsBuilder = new DbContextOptionsBuilder<AppDbContext>();

        optionsBuilder.UseNpgsql(Configuration.GetConnectionString(EnvironmentContants.ConnectionStringDevelopment));

        return new AppDbContext(optionsBuilder.Options);
    }
}

В части optionsBuilder.UseNpgsql() мне понадобится объект среды хостинга, чтобы понять, является ли он средой IsProduction или IsDevelopment.

...