Вы не можете использовать относительную строку соединения с SQLite на EF7, поэтому мне нужен способ получить каталог приложений из Startup.cs во время процедуры ConfigureServices, где DBContext .Получить каталог приложений из метода Configure в Startup.Cs
Любая идея, как это сделать с библиотеками .NetCoreApp?
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
//Figure out app directory here and replace token in connection string with app directory.......
var connectionString = Configuration["SqliteConnectionString"];
if (string.IsNullOrEmpty(connectionString))
throw new Exception("appSettings.json is missing the SqliteConnectionString entry.");
services.AddDbContext<MyContext>(options =>
{
options.UseSqlite(connectionString, b => b.MigrationsAssembly("xyz.myproject.webapp"));
});
}
прекрасно работает, и я предпочитаю этот метод. Я полностью пропустил объект IHostingEnvironment в конструкторе. Спасибо что подметил это. –
Я не понимаю, как это работает, ConfigureServices() запускается до Startup(), поэтому переменная среды всегда будет пуста при доступе из ConfigureServices? –
no Конструктор Startup должен быть вызван первым, запуск не является статическим классом, ConfigureServices не может быть вызван перед вызовом конструктора, чтобы создать экземпляр Startup, поскольку это метод экземпляра, а не статический метод. Это немного изменилось в 2.0 шаблонах проектов, так как теперь IConfiguration создается в программе и передается в конструктор Startup, хотя старый синтаксис все еще работает. –