У меня есть приложение для консоли .net 8.0, которое использует Generic Host .net (Microsoft.Extensions.Hosting v8.0.0 nuget package).
Я вводил образец службы, которая реализует Idisposable . Когда я закрываю свое приложение с помощью Ctrl+C , dispose () не требуется для моей службы. Я нашел два обходного пути для этого (через ihostapplicationLifetime и через host.dispose () ).
Но я все еще не понимаю, зачем мне вообще? Почему IHOST < /code> утилизирует все зарегистрированные экземпляры службы на хосте
weplowd?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()");
}
Обновление: Как я могу видеть в microsoft.extensions.hosting.abstractions источники host.runasync () на самом деле как
try
{
await host.StartAsync(token).ConfigureAwait(false);
await host.WaitForShutdownAsync(token).ConfigureAwait(false);
}
finally
{
if (host is IAsyncDisposable asyncDisposable)
{
await asyncDisposable.DisposeAsync().ConfigureAwait(false);
}
else
{
host.Dispose();
}
}
Подробнее здесь: https://stackoverflow.com/questions/795 ... host-shutd
.NET Generic Host не утилизирует все зарегистрированные экземпляры обслуживания при выключении хоста ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Запрет на несколько реализаций службы в коллекции обслуживания .NET Generic Host Host
Anonymous » » в форуме C# - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-