30 lines
1.4 KiB
C#
30 lines
1.4 KiB
C#
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
namespace ScadaLink.SiteEventLogging;
|
|
|
|
public static class ServiceCollectionExtensions
|
|
{
|
|
/// <summary>
|
|
/// Register site event logging services (recording, purge, query).
|
|
/// </summary>
|
|
public static IServiceCollection AddSiteEventLogging(this IServiceCollection services)
|
|
{
|
|
// The recorder is registered as a concrete singleton and the interface is
|
|
// forwarded to the same instance. The purge and query services depend on the
|
|
// concrete SiteEventLogger directly (they need its lock-guarded WithConnection)
|
|
// rather than downcasting an ISiteEventLogger, which would throw
|
|
// InvalidCastException for any other ISiteEventLogger implementation.
|
|
services.AddSingleton<SiteEventLogger>();
|
|
services.AddSingleton<ISiteEventLogger>(sp => sp.GetRequiredService<SiteEventLogger>());
|
|
services.AddSingleton<IEventLogQueryService, EventLogQueryService>();
|
|
services.AddHostedService<EventLogPurgeService>();
|
|
return services;
|
|
}
|
|
|
|
// NOTE: EventLogHandlerActor is wired up directly in
|
|
// ScadaLink.Host/Actors/AkkaHostedService.cs as a cluster singleton, because the
|
|
// actor must be created inside the ActorSystem with the resolved
|
|
// IEventLogQueryService. There is intentionally no DI helper for that here — a
|
|
// former AddSiteEventLoggingActors placeholder was dead code and has been removed.
|
|
}
|