Files
Evergreen-Health/Evergreen.Health.Application/Health/Devices/HealthDeviceRegistration.cs
T
2026-10-09 16:46:30 +08:00

78 lines
5.0 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.Mattress;
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, LightMassageSafetyRule>();
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>();
services.AddSingleton<IHealthDeviceModule>(provider => provider.GetRequiredService<LightingModule>());
services.AddSingleton<AudioModule>();
services.AddSingleton<IHealthDeviceModule>(provider => provider.GetRequiredService<AudioModule>());
services.AddSingleton<MattressModule>();
services.AddSingleton<IHealthDeviceModule>(provider => provider.GetRequiredService<MattressModule>());
services.AddSingleton<ILightOffHandler>(provider => provider.GetRequiredService<MattressModule>());
services.AddSingleton<LightOffDispatcher>();
services.AddSingleton<DeviceModuleRegistry>();
services.AddSingleton<HomeAssistantDeviceCatalog>();
services.AddSingleton<HealthSceneCoordinator>();
return services;
}
}