mycorerepository/MyCore/Extensions/ServiceCollectionExtension.cs
2021-03-11 22:50:22 +01:00

130 lines
5.7 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 MyCore.Services;
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;
}
public static IServiceCollection AddMerossClientHostedService(this IServiceCollection services)
{
services.AddMerossClientServiceWithConfig(aspOnlineOptionBuilder =>
{
/*var clientSettings = AppSettingsMerossProvider.ClientMerossSettings;
var brokerHostSettings = AppSettingsMerossProvider.BrokerHostMerossSettings;
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;
}
private static IServiceCollection AddMerossClientServiceWithConfig(this IServiceCollection services, Action<AspCoreMerossClientOptionBuilder> configure)
{
/*services.AddSingleton<IMqttClientOptions>(serviceMerossProvider =>
{
var optionBuilder = new AspCoreMerossClientOptionBuilder(serviceMerossProvider);
configure(optionBuilder);
return optionBuilder.Build();
});*/
services.AddSingleton<MqttClientMerossService>();
services.AddSingleton<IHostedService>(serviceProvider =>
{
return serviceProvider.GetService<MqttClientMerossService>();
});
services.AddSingleton<MqttClientMerossServiceProvider>(serviceProvider =>
{
var merossClientService = serviceProvider.GetService<MqttClientMerossService>();
var merossServiceProvider = new MqttClientMerossServiceProvider(merossClientService);
return merossServiceProvider;
});
return services;
}
}
}