#c# #.net-core
#c# #.net-ядро
Вопрос:
Вот в чем дело: у меня есть метод:
public startic class ServiceFactory
{
public static void IWebHostBuilder Foo()
{
return WebHost.CreateDefaultBuilder()
.UseEnvironment("someEnv")
.UseStartup<SomeStartup>()
.ConfigureServices(ConfigureServices);
}
}
Внутри SomeStartup
я хотел бы настроить начальные данные БД на основе требований метода / тестового примера.
Я не собираюсь добавлять дополнительные начальные данные в кучу уже существующих начальных данных, а создаю совершенно новую кучу для каждого набора тестов.
Я не нашел ни подходящего метода расширения, который помог бы, ни способа параметризации SomeStartup
Пример тестового примера приведен ниже:
{
//Arrange
var context = new bar(_someParameter1, ServiceFactory.Foo(), someParameter2)
//Act
(...)
//Assert
(...)
}
У вас есть какие-либо предложения?
Комментарии:
1. Я думаю, вам нужно было бы поместить в конструктор для класса SomeStartup.
2.
.UseStartup<SomeStartup>()
не позволяет мне использовать класс с введенным параметром3. Добавьте параметр для выбора начального значения. В
Startup.ConfigureService
, вы можете вводитьIConfiguration
.
Ответ №1:
Может быть, вы можете использовать переменные среды как обычно? Добавьте IHostingEnvironment для настройки метода в SomeStartup для анализа среды:
public void Configure(IHostingEnvironment env, ... )
{
if (env.IsDevelopment())
{
// seed1
}
else
{
// seed2
}
// or like this
if (!env.IsEnvironment("EF_MIGRATIONS"))
{
// seed3
}
// or some other variable
var p = Environment.GetEnvironmentVariable("PATH");
//
seed4
// ...
}