Чтобы упростить задачу, мы решили начать использовать Generic Host со всеми доступные функции для всех будущих улучшений (настройки приложений/ведение журнала/DI и т. д.).
Идея состоит в том, что как только мы переключимся на API, мы скопируем конфигурацию хоста, и большая часть кода продолжит работать. Мы предоставим хост.Services.GetService() устаревшей кодовой базе, которая будет использовать его как простой ServiceLocator.
Вопрос: есть ли какие-либо недостатки в использовании такого подхода? Кроме того, нужно ли нам использовать Start/Stop/Run на общем хосте? Судя по тому, что я прочитал, это необходимо только для запуска IHostedService, который мы не планируем использовать. Я проверил, работает ли он без вызова Start/Stop, и вроде бы все в порядке, но все примеры, которые я нашел, вызывают Start/Stop даже без IHostedService.
Код: Выделить всё
private IHost _host;
private PricingHost()
{
_host = new HostBuilder()
.UseEnvironment("BETA")
.ConfigureAppConfiguration((hostContext, configApp) =>
{
configApp.SetBasePath(System.IO.Directory.GetCurrentDirectory());
configApp.AddJsonFile("appsettings.json", optional: true);
configApp.AddJsonFile(
$"appsettings.{hostContext.HostingEnvironment.EnvironmentName}.json",
optional: true);
})
.ConfigureLogging((hostContext, configLogging) =>
{
configLogging.AddConfiguration(hostContext.Configuration.GetSection("Logging"));
configLogging.AddDebug();
configLogging.AddConsole();
configLogging.AddCustomLogger();
})
.ConfigureServices((hostContext, configServices) =>
{
var startup = new Startup(hostContext.Configuration);
startup.ConfigureServices(configServices);
})
.Build();
}
public T GetService()
{
return _host.Services.GetService();
}
public T GetRequiredService()
{
return _host.Services.GetRequiredService();
}
После небольшого POC я знаю, что это вполне возможно, но я пытаюсь выяснить, есть ли какие-либо подводные камни, о которых мне следует знать, и как правильно использовать GenericHost без IHostedService (нужно ли мне в какой-то момент вызывать Run/Start/Stop или в этом нет необходимости)?
ОБНОВЛЕНИЕ: Добавляем пример скрипта dot net того, что я здесь делаю
Подробнее здесь: https://stackoverflow.com/questions/611 ... tedservice
Мобильная версия