mycorerepository/MyCore/Extensions/ServiceCollectionExtension.cs
2021-01-02 16:53:06 +01:00

93 lines
3.9 KiB
C#

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;
}
public static IServiceCollection AddMqttClientOnlineHostedService(this IServiceCollection services)
{
services.AddMqttClientOnlineServiceWithConfig(aspOnlineOptionBuilder =>
{
var clientSettings = AppSettingsOnlineProvider.ClientOnlineSettings;
var brokerHostSettings = AppSettingsOnlineProvider.BrokerHostOnlineSettings;
aspOnlineOptionBuilder
.WithCredentials(clientSettings.UserName, clientSettings.Password)
.WithClientId(clientSettings.Id)
.WithTcpServer(brokerHostSettings.Host, brokerHostSettings.Port);
});
return services;
}
private static IServiceCollection AddMqttClientServiceWithConfig(this IServiceCollection services, Action<AspCoreMqttClientOptionBuilder> configure)
{
// No need as we implement options in service (localhost)
/*services.AddSingleton<IMqttClientOptions>(serviceProvider =>
{
var optionBuilder = new AspCoreMqttClientOptionBuilder(serviceProvider);
configure(optionBuilder);
return optionBuilder.Build();
});*/
services.AddSingleton<MqttClientService>();
services.AddSingleton<IHostedService>(serviceProvider =>
{
return serviceProvider.GetService<MqttClientService>();
});
services.AddSingleton<MqttClientServiceProvider>(serviceProvider =>
{
var mqttClientService = serviceProvider.GetService<MqttClientService>();
var mqttClientServiceProvider = new MqttClientServiceProvider(mqttClientService);
return mqttClientServiceProvider;
});
return services;
}
private static IServiceCollection AddMqttClientOnlineServiceWithConfig(this IServiceCollection services, Action<AspCoreMqttOnlineClientOptionBuilder> configure)
{
services.AddSingleton<IMqttClientOptions>(serviceOnlineProvider =>
{
var optionBuilder = new AspCoreMqttOnlineClientOptionBuilder(serviceOnlineProvider);
configure(optionBuilder);
return optionBuilder.Build();
});
services.AddSingleton<MqttClientOnlineService>();
services.AddSingleton<IHostedService>(serviceProvider =>
{
return serviceProvider.GetService<MqttClientOnlineService>();
});
services.AddSingleton<MqttClientOnlineServiceProvider>(serviceProvider =>
{
var mqttOnlineClientService = serviceProvider.GetService<MqttClientOnlineService>();
var mqttOnlineClientServiceProvider = new MqttClientOnlineServiceProvider(mqttOnlineClientService);
return mqttOnlineClientServiceProvider;
});
return services;
}
}
}