84 lines
5.6 KiB
C#
84 lines
5.6 KiB
C#
using Evergreen.Health.Application.Health.Devices.Audio;
|
|
using Evergreen.Health.Application.Health.Devices.Contracts;
|
|
using Evergreen.Health.Application.Health.Devices.Environment;
|
|
using Evergreen.Health.Application.Health.Devices.Climate;
|
|
using Evergreen.Health.Application.Health.Devices.Curtain;
|
|
using Evergreen.Health.Application.Health.Devices.Discovery;
|
|
using Evergreen.Health.Application.Health.Devices.Dehumidifier;
|
|
using Evergreen.Health.Application.Health.Devices.Fragrance;
|
|
using Evergreen.Health.Application.Health.Devices.Lighting;
|
|
using Evergreen.Health.Application.Health.Devices.Outlet;
|
|
using Evergreen.Health.Application.Health.Integrations.HomeAssistant;
|
|
using Evergreen.Health.Application.Health.Integrations.MiAirX;
|
|
using Evergreen.Health.Application.Health.Scenes;
|
|
using Evergreen.Health.Application.Health.Sleep;
|
|
using Evergreen.Health.Application.Health.Integrations.Tuya;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.Options;
|
|
|
|
namespace Evergreen.Health.Application.Health.Devices;
|
|
|
|
public static class HealthDeviceRegistration
|
|
{
|
|
public static IServiceCollection AddHealthDevices(this IServiceCollection services)
|
|
{
|
|
services.AddSingleton(TimeProvider.System);
|
|
services.AddSingleton(new DeviceExecutionOptions());
|
|
// 仅注册扩展契约,不启动传感器轮询、上床流程或占位音频播放。
|
|
services.AddSingleton(new SleepWorkflowOptions());
|
|
services.AddSingleton<GuidanceCatalog>();
|
|
services.AddSingleton<ISleepObservationSource, ReservedJe01Source>();
|
|
services.AddSingleton<IGuidancePlayer, ReservedGuidancePlayer>();
|
|
services.AddSingleton<ITuyaGateway, ReservedTuyaGateway>();
|
|
services.AddTransient<ReservedSleepWorkflow>();
|
|
services.AddTransient<AnomalyReminderGate>();
|
|
services.AddSingleton<IHomeAssistantGateway>(provider => new HomeAssistantClient(
|
|
provider.GetRequiredService<IHttpClientFactory>().CreateClient(nameof(HomeAssistantClient)),
|
|
provider.GetRequiredService<IOptions<HomeAssistantOptions>>()));
|
|
services.AddSingleton<IAudioPlaybackGateway>(provider => new MiAirXClient(
|
|
provider.GetRequiredService<IHttpClientFactory>().CreateClient(nameof(MiAirXClient)),
|
|
provider.GetRequiredService<IOptions<MiAirXOptions>>()));
|
|
services.AddSingleton<DeviceActionRunner>();
|
|
services.AddSingleton<SceneLightSafetyState>();
|
|
services.AddSingleton<IDeviceActionSafetyRule, PrimaryLightStateRule>();
|
|
services.AddSingleton<IndoorEnvironmentReader>();
|
|
services.AddSingleton<EnvironmentModule>();
|
|
services.AddSingleton<IHealthDeviceModule>(provider => provider.GetRequiredService<EnvironmentModule>());
|
|
services.AddSingleton<ClimateModule>();
|
|
services.AddSingleton<IHealthDeviceModule>(provider => provider.GetRequiredService<ClimateModule>());
|
|
services.AddSingleton<CurtainModule>();
|
|
services.AddSingleton<IHealthDeviceModule>(provider => provider.GetRequiredService<CurtainModule>());
|
|
services.AddSingleton<OutletModule>();
|
|
services.AddSingleton<IHealthDeviceModule>(provider => provider.GetRequiredService<OutletModule>());
|
|
services.AddSingleton<TcmMusicTransitionService>();
|
|
services.AddSingleton<ITcmMusicRuntime>(provider => provider.GetRequiredService<TcmMusicTransitionService>());
|
|
services.AddHostedService(provider => provider.GetRequiredService<TcmMusicTransitionService>());
|
|
services.AddSingleton<HomeAssistantLightTransitionService>();
|
|
services.AddSingleton<ILightTransitionRuntime>(provider => provider.GetRequiredService<HomeAssistantLightTransitionService>());
|
|
services.AddHostedService(provider => provider.GetRequiredService<HomeAssistantLightTransitionService>());
|
|
services.AddSingleton<DehumidifierModule>();
|
|
services.AddSingleton<IHealthDeviceModule>(provider => provider.GetRequiredService<DehumidifierModule>());
|
|
services.AddSingleton<FragranceModule>();
|
|
services.AddSingleton<IHealthDeviceModule>(provider => provider.GetRequiredService<FragranceModule>());
|
|
services.AddSingleton<LightingModule>(provider => new(
|
|
provider.GetRequiredService<DeviceActionRunner>(), provider.GetRequiredService<IOptions<HomeAssistantOptions>>(),
|
|
provider.GetRequiredService<HomeAssistantLightTransitionService>().ForEntity(
|
|
provider.GetRequiredService<IOptions<HomeAssistantOptions>>().Value.Entities.AmbientLight),
|
|
provider.GetRequiredService<LightOffDispatcher>()));
|
|
services.AddSingleton<IHealthDeviceModule>(provider => provider.GetRequiredService<LightingModule>());
|
|
services.AddSingleton<AudioModule>();
|
|
services.AddSingleton<IHealthDeviceModule>(provider => provider.GetRequiredService<AudioModule>());
|
|
services.AddSingleton<LightOffDispatcher>();
|
|
services.AddSingleton<DeviceModuleRegistry>(provider => new(
|
|
provider.GetServices<IHealthDeviceModule>().Concat(
|
|
provider.GetRequiredService<IOptions<HomeAssistantOptions>>().Value.AdditionalSleepLights.Select(light =>
|
|
new ConfiguredSleepLightModule(provider.GetRequiredService<DeviceActionRunner>(), light,
|
|
provider.GetRequiredService<HomeAssistantLightTransitionService>().ForEntity(light.EntityId))))));
|
|
services.AddSingleton<IStandardDeviceControl, StandardLightControl>();
|
|
services.AddSingleton<DeviceParameterController>();
|
|
services.AddSingleton<HomeAssistantDeviceCatalog>();
|
|
services.AddSingleton<HealthSceneCoordinator>();
|
|
return services;
|
|
}
|
|
}
|