Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET Core
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 6

Создание Generic Host - передача параметров

09.01.2020, 02:20. Показов 2263. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем. Разбираюсь с .NET Core 3.1. В ASP вообще пока не лезу, исключительно консоль и десктоп. Отдельной ветки по .NET Core без ASP нет, поэтому пишу сюда.

Во введении ASP.NET Core fundamentals нашёл такую штуку как Host — https://docs.microsoft.com/en-... ndows#host, а конкретно Generic Host, который, начиная с третьей версии заменяет существующий Web Host, и который может использоваться для инкапсуляции логгирования, внедрения зависимостей, конфигурации и прочего, и который может использоваться не только в вебе, а также для консольных и десктопных приложений, что мне и нужно. Где-то в другом месте прочитал, что не только может, но и рекомендуется.

Лирическое отступление — всё началось с того, что я попробовал перенести своё старое WPF приложение с .NET Framework 4.8 на .NET Core 3 и обнаружил, что старый метод сохранения конфигурации не работает. Начал искать, прошерстил кучу страниц и вышел на Generic Host. Теперь пытаюсь разобраться, как это всё работает хотя бы с консольным приложением. Что мне нужно для начала — сохранение/восстановление конфигурации в файл и логгирование.

Нашёл вот такой пример — https://www.stevejgordon.co.uk... roservices. Здесь, кстати, и сказано, что:

A new option available to developers working with .NET Core 2.1 is the new “generic” Host which enables developers to easily set up cross-cutting concerns such as logging, configuration and dependency injection for non-web focused applications. The team have realised that having the host tied to the concern of HTTP was perhaps not an ideal solution since many of these things are common requirements in other application types.

An example of where this could be used is in a console application which needs to run background processing tasks, perhaps handling messages on a queue for example. These types of services are now pretty common in a cloud native, container based architecture.


Гугл-перевод:

Новая опция, доступная разработчикам, работающим с .NET Core 2.1, - это новый «универсальный» хост, который позволяет разработчикам легко настраивать сквозные задачи, такие как ведение журнала, конфигурирование и внедрение зависимостей для приложений, не ориентированных на Интернет. Команда осознала, что привязка хоста к заботе о HTTP, возможно, не была идеальным решением, поскольку многие из этих вещей являются общими требованиями для других типов приложений.

Примером того, где это можно использовать, является консольное приложение, которое должно запускать задачи фоновой обработки, например, обрабатывать сообщения в очереди. Эти типы сервисов в настоящее время довольно распространены в облачной архитектуре на основе контейнеров.


Все эти возможности доступны в виде отдельного пакета Microsoft.Extensions.Hosting. Ставлю через NuGet. Заодно скачал полные исходники этих расширений с гитхаба.

Начал разбирать этот пример:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
 
namespace GenericHostExample
{
    public class Program
    {
        public static async Task Main(string[] args)
        {
            var builder = new HostBuilder()
                .ConfigureAppConfiguration((hostingContext, config) =>
                {
                    config.AddJsonFile("appsettings.json", optional: true);
                    config.AddEnvironmentVariables();
 
                    if (args != null)
                    {
                        config.AddCommandLine(args);
                    }
                })
                .ConfigureServices((hostContext, services) =>
                {
                    services.AddOptions();
                    services.Configure<AppConfig>(hostContext.Configuration.GetSection("AppConfig"));
 
                    services.AddSingleton<IHostedService, PrintTextToConsoleService>();
                })
                .ConfigureLogging((hostingContext, logging) => {
                    logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
                    logging.AddConsole();
                });
 
            await builder.RunConsoleAsync();
        }
    }
}
и сразу споткнулся на первом же методе:

C#
1
2
3
4
5
6
7
8
9
10
11
var builder = new HostBuilder()
                .ConfigureAppConfiguration((hostingContext, config) =>
                {
                    config.AddJsonFile("appsettings.json", optional: true);
                    config.AddEnvironmentVariables();
 
                    if (args != null)
                    {
                        config.AddCommandLine(args);
                    }
                })
Суть то ясна — создаём новый экземпляр HostBuilder и последовательно вызываем его методы, каждый из которых возвращает его самого. Но вопрос — а где и когда создаются экземпляры параметров hostingContext и config?!

Сама реализация метода ConfigureAppConfiguration выглядит вот так:

C#
1
2
3
4
5
public IHostBuilder ConfigureAppConfiguration(Action<HostBuilderContext, IConfigurationBuilder> configureDelegate)
        {
            _configureAppConfigActions.Add(configureDelegate ?? throw new ArgumentNullException(nameof(configureDelegate)));
            return this;
        }
С методом AddJsonFile тоже понятно - это статическое расширение для IConfigurationBuilder:

C#
1
2
3
4
public static IConfigurationBuilder AddJsonFile(this IConfigurationBuilder builder, string path)
        {
            return AddJsonFile(builder, provider: null, path: path, optional: false, reloadOnChange: false);
        }
Но ведь оно работает же с конкретным экземпляром класса! Так когда создается этот экзмепляр IConfigurationBuilder config?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.01.2020, 02:20
Ответы с готовыми решениями:

Передача параметров
Добрый день. Я новичок в ASP.NET, возник вопрос. На странице при нажатии на кнопку проверяется ряд условий. Если одно из них...

Generic Host
как можно устранить Generic Host потому что оно не даеть работать, жлюз закырвають, сеть пропадеть. Помогите пожалуиста

GENERIC HOST PROCESS...
Прошу помощи! На в общем - то исправном компе то раз в неделю, то каждые пять минут вываливается сообщение GENERIC HOST PROCESS FOR WIN32...

2
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 6
09.01.2020, 12:03  [ТС]
Всё, отбой, разобрался. Я забыл как делегаты работают. Это же определение делегата, никакие параметры в него не передаются. Сначала идёт формирование списка действий. А при выполнении этих действий уже передаются параметры:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
private void BuildAppConfiguration()
        {
            var configBuilder = new ConfigurationBuilder()
                .SetBasePath(_hostingEnvironment.ContentRootPath)
                .AddConfiguration(_hostConfiguration, shouldDisposeConfiguration: true);
 
            foreach (var buildAction in _configureAppConfigActions)
            {
                buildAction(_hostBuilderContext, configBuilder);
            }
            _appConfiguration = configBuilder.Build();
            _hostBuilderContext.Configuration = _appConfiguration;
        }
Сам спросил, сам ответил, короче
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
10.01.2020, 19:18
А еще конфигурация readonly так что не особо вам поможет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.01.2020, 19:18
Помогаю со студенческими работами здесь

Generic Host Process
Всем доброго здравия. Вот такая трабла у жены на компе - Generic Host Process for Win32 Services - обнаружена ошибка. приложение будет...

Generic Host Process for Win32
20мин И-нета и (ППЦ) появляется ошыбка Generic Host Process for Win32, если нажать &quot;Не отправлять отчет&quot; или &quot;Отправить&quot;...

GENERIC HOST PROCESS For win32 Services
при включении инета через определенное время выскакивает окно с надписью- GENERIC HOST PROCESS For win.32 Servies--далее пишет- при...

Generic Host Process for Win 32 Services
Обрубается Интернет....,после перезагрузки вылетает вот эта ошибка: Generic Host Process for Win 32 Services Подпись Ошибки szAppName...

generic host process for win32 services
вообщем выглядит все как generic host process for win32 services но, невыскакивает само собщение. ставил заплатки на СП 2 непомогло...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru