У меня есть приложение для консоли .net 8.0, которое использует Generic Host .net (Microsoft.extensions.hosting 8.0.0 Nuget Package).
Я вводил образцы службы, которая реализует Idisposable. Когда я закрываю свое заявление с помощью ctrl+c dispose (), не требуется для моей службы. Я нашел для него два обходных пути (через ihostapplicationLifetime и через host.dispose ()). < /P>
Но я все еще не понимаю, зачем мне они вообще нужны? Почему ihost не утилизирует все зарегистрированные экземпляры ihostedService при выключении хоста?
Мой пример кода: < /p>
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
namespace IHostCtrlC;
internal class Program
{
static void Main()
{
var hostBuilder = Host.CreateDefaultBuilder().ConfigureServices(services =>
{
services.AddSingleton();
});
var host = hostBuilder.Build();
host.Start();
//workaround via IHostApplicationLifetime
var hostApplicationLifetime = host.Services.GetRequiredService();
var service1 = host.Services.GetRequiredService();
hostApplicationLifetime.ApplicationStopping.Register(OnShutdown, service1);
//end of workaround via IHostApplicationLifetime
Console.WriteLine(host.Services.GetRequiredService().GetText());
host.WaitForShutdown();
//workaround via host.Dispose()
//host.Dispose();
}
private static void OnShutdown(object toDispose)
{
((IDisposable)toDispose).Dispose();
}
}
internal interface IService1 : IDisposable
{
string GetText();
}
internal class Service1 : IService1
{
public string GetText() => "Text from Service1";
public void Dispose() => Console.WriteLine("Service1.Dispose()");
}
Подробнее здесь: https://stackoverflow.com/questions/795 ... ces-on-hos
.NET Generic Host не утилизирует все зарегистрированные экземпляры IhostedService при выключении хоста ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Запрет на несколько реализаций службы в коллекции обслуживания .NET Generic Host Host
Anonymous » » в форуме C# - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-