В описаниях DI для asp netcore пишут, что настройка выполняется в ConfigureServices() класса Startup.
Но как тогда уже в конструкторе (!!!) этого класса можно передавать параметр IConfiguration выходит DI включается еще раньше?
В пустом проекте класс выглядит так:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
но в некоторых вопросах вижу, что можно передать еще другие параметры:
public class Startup
{
public Startup(IConfiguration configuration, IHostingEnvironment env)
{
Где же тогда происходт настройка этого и что можно еще передать на конструктор?
Смотрел в Program.cs но там пусто:
public static class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
private static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
Это всё делается внутри CreateDefaultBuilder, там написано (упрощённо) следующее:
Создаётся билдер и настраиваются параметры args из командной строки (если есть):
WebHostBuilder hostBuilder = new WebHostBuilder();
if (args != null)
hostBuilder.UseConfiguration((IConfiguration) new ConfigurationBuilder().AddCommandLine(args).Build());
Потом включается веб-сервер Kestrel и у него сразу устанавливается IHostingEnvironment, настраивается логирование, первые сервисы (и потому вы можете использовать это всё в своём Startup.cs) и включается поддержка IIS.
hostBuilder.UseKestrel( ...
{
IHostingEnvironment hostingEnvironment = hostingContext.HostingEnvironment;
})).ConfigureLogging( ...
{
logging.AddConfiguration(
logging.AddConsole();
logging.AddDebug();
logging.AddEventSourceLogger();
})).ConfigureServices( ...
}))
.UseIIS().UseIISIntegration().UseDefaultServiceProvider();
return (IWebHostBuilder) hostBuilder;
Всё остальное это уже потом вы сами включаете в Startup.cs по потребности (например, DbContext и т.п. вещи)
и что можно еще передать на конструктор
Судя по документации можно три вещи:
Лично мне кроме штатного IConfiguration только однажды пришлось писать собственный провайдер конфигурации, а примеры на логирование я только синтетические писал на обучении.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
нужно покрасить определенные столбцы в другой цвет, но проблема в том, что он красит не только столбцы, но и все ячейки до конца файла, как...
проблема в чем: поставил chromedriver через консоль, тест первый раз запустился прошел, следующий сразу упал, потом постоянно такая ошибка, возможно...
Пытаюсь добавить в URL строку запроса Чтобы было https://localhost:44390/paramaspx?login=11 листинг