using ManagerService.Extensions; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Mqtt.Client.AspNetCore.Options; using Mqtt.Client.AspNetCore.Services; using Mqtt.Client.AspNetCore.Settings; using MQTTnet.Client.Options; using System; namespace MyCore.Service.Extensions { public static class ServiceCollectionExtension { public static IServiceCollection AddMqttClientHostedService(this IServiceCollection services) { services.AddMqttClientServiceWithConfig(aspOptionBuilder => { var clientSettings = AppSettingsProvider.ClientSettings; var brokerHostSettings = AppSettingsProvider.BrokerHostSettings; aspOptionBuilder .WithCredentials(clientSettings.UserName, clientSettings.Password) .WithClientId(clientSettings.Id) .WithTcpServer(brokerHostSettings.Host, brokerHostSettings.Port); }); return services; } private static IServiceCollection AddMqttClientServiceWithConfig(this IServiceCollection services, Action configure) { // No need as we implement options in service (localhost) services.AddSingleton(serviceProvider => { var optionBuilder = new AspCoreMqttClientOptionBuilder(serviceProvider); configure(optionBuilder); return optionBuilder.Build(); }); services.AddSingleton(); services.AddSingleton(serviceProvider => { return serviceProvider.GetService(); }); services.AddSingleton(serviceProvider => { var mqttClientService = serviceProvider.GetService(); var mqttClientServiceProvider = new MqttClientServiceProvider(mqttClientService); return mqttClientServiceProvider; }); return services; } } }