Как правильно использовать универсальный хост .Net Core без IHostedService?C#

Место общения программистов C#
Ответить
Anonymous
 Как правильно использовать универсальный хост .Net Core без IHostedService?

Сообщение Anonymous »

У нас есть устаревшее приложение, которое мы планируем в будущем перевести на ASP.NET Core API (v2.2).
Чтобы упростить задачу, мы решили начать использовать 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();
}
ОБНОВЛЕНИЕ: позвольте мне попытаться прояснить ситуацию. У нас есть устаревший сервис Windows с 10-летней историей. Мы планируем перевести его на asp.net .net core api когда-нибудь в будущем, НО сейчас работа над службой Windows все еще продолжается. Чтобы упростить будущий переход, мы хотим использовать универсальный хост для внедрения изменений, доступа к конфигурации, ведения журналов и т. д. Мы просто хотим использовать его в качестве локатора сервисов (поэтому нет необходимости в IHostedService), но у нас есть возможность когда-нибудь в будущем иметь возможность просто скопируйте всю конфигурацию/настройку и вставьте ее в новый API.
После небольшого POC я знаю, что это вполне возможно, но я пытаюсь выяснить, есть ли какие-либо подводные камни, о которых мне следует знать, и как правильно использовать GenericHost без IHostedService (нужно ли мне в какой-то момент вызывать Run/Start/Stop или в этом нет необходимости)?
ОБНОВЛЕНИЕ: Добавляем пример скрипта dot net того, что я здесь делаю

Подробнее здесь: https://stackoverflow.com/questions/611 ... tedservice
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»