diff --git a/Source/MQTTnet.AspnetCore/MqttHostedServer.cs b/Source/MQTTnet.AspnetCore/MqttHostedServer.cs index c6c64ffd..b34adc3d 100644 --- a/Source/MQTTnet.AspnetCore/MqttHostedServer.cs +++ b/Source/MQTTnet.AspnetCore/MqttHostedServer.cs @@ -16,26 +16,51 @@ namespace MQTTnet.AspNetCore public sealed class MqttHostedServer : MqttServer, IHostedService { readonly MqttFactory _mqttFactory; - - public MqttHostedServer(MqttFactory mqttFactory, MqttServerOptions options, IEnumerable adapters, IMqttNetLogger logger) : base( +#if NETCOREAPP3_1_OR_GREATER + readonly IHostApplicationLifetime _hostApplicationLifetime; + public MqttHostedServer(IHostApplicationLifetime hostApplicationLifetime, MqttFactory mqttFactory, + MqttServerOptions options, IEnumerable adapters, IMqttNetLogger logger) : base( + options, + adapters, + logger) + { + _mqttFactory = mqttFactory ?? throw new ArgumentNullException(nameof(mqttFactory)); + _hostApplicationLifetime = hostApplicationLifetime; + } +#else + public MqttHostedServer(MqttFactory mqttFactory, + MqttServerOptions options, IEnumerable adapters, IMqttNetLogger logger) : base( options, adapters, logger) { _mqttFactory = mqttFactory ?? throw new ArgumentNullException(nameof(mqttFactory)); } +#endif + public async Task StartAsync(CancellationToken cancellationToken) { // The yield makes sure that the hosted service is considered up and running. await Task.Yield(); - +#if NETCOREAPP3_1_OR_GREATER + _hostApplicationLifetime.ApplicationStarted.Register(OnStarted); +#else _ = StartAsync(); +#endif + } public Task StopAsync(CancellationToken cancellationToken) { return StopAsync(_mqttFactory.CreateMqttServerStopOptionsBuilder().Build()); } + +#if NETCOREAPP3_1_OR_GREATER + private void OnStarted() + { + _ = StartAsync(); + } +#endif } } \ No newline at end of file