fix(s7): thread ILoggerFactory into the S7 driver factory (#602 CONV-3)

Claude-Session: https://claude.ai/code/session_01Ef2ozxS7QPanGT8uoATbTe
This commit is contained in:
Joseph Doherty
2026-10-08 06:59:29 -04:00
parent 3baa332d6b
commit e3cb2dd591
2 changed files with 16 additions and 5 deletions
@@ -1,5 +1,6 @@
using System.Text.Json; using System.Text.Json;
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using Microsoft.Extensions.Logging;
using ZB.MOM.WW.OtOpcUa.Core.Abstractions; using ZB.MOM.WW.OtOpcUa.Core.Abstractions;
using ZB.MOM.WW.OtOpcUa.Core.Hosting; using ZB.MOM.WW.OtOpcUa.Core.Hosting;
@@ -16,22 +17,32 @@ public static class S7DriverFactoryExtensions
public const string DriverTypeName = "S7"; public const string DriverTypeName = "S7";
/// <summary>Registers the S7 driver factory with the registry.</summary> /// <summary>Registers the S7 driver factory with the registry.</summary>
/// <remarks>
/// The optional <paramref name="loggerFactory"/> is captured at registration time and used to
/// build an <see cref="ILogger{S7Driver}"/> per driver instance — without it the driver runs on
/// the null logger and none of its diagnostics (connect/reconnect, skipped tags, poll faults)
/// reach the node log (CONV-3).
/// </remarks>
/// <param name="registry">The driver factory registry.</param> /// <param name="registry">The driver factory registry.</param>
public static void Register(DriverFactoryRegistry registry) /// <param name="loggerFactory">Optional logger factory for driver instances.</param>
public static void Register(DriverFactoryRegistry registry, ILoggerFactory? loggerFactory = null)
{ {
ArgumentNullException.ThrowIfNull(registry); ArgumentNullException.ThrowIfNull(registry);
registry.Register(DriverTypeName, CreateInstance); registry.Register(DriverTypeName, (id, json) => CreateInstance(id, json, loggerFactory));
} }
/// <summary>Creates a new S7 driver instance from configuration.</summary> /// <summary>Creates a new S7 driver instance from configuration.</summary>
/// <param name="driverInstanceId">The unique identifier for the driver instance.</param> /// <param name="driverInstanceId">The unique identifier for the driver instance.</param>
/// <param name="driverConfigJson">The JSON configuration for the driver.</param> /// <param name="driverConfigJson">The JSON configuration for the driver.</param>
/// <returns>A newly created S7 driver instance.</returns> /// <returns>A newly created S7 driver instance.</returns>
internal static S7Driver CreateInstance(string driverInstanceId, string driverConfigJson) /// <param name="loggerFactory">Optional logger factory for the driver instance.</param>
internal static S7Driver CreateInstance(
string driverInstanceId, string driverConfigJson, ILoggerFactory? loggerFactory = null)
{ {
ArgumentException.ThrowIfNullOrWhiteSpace(driverInstanceId); ArgumentException.ThrowIfNullOrWhiteSpace(driverInstanceId);
ArgumentException.ThrowIfNullOrWhiteSpace(driverConfigJson); ArgumentException.ThrowIfNullOrWhiteSpace(driverConfigJson);
return new S7Driver(ParseOptions(driverInstanceId, driverConfigJson), driverInstanceId); return new S7Driver(ParseOptions(driverInstanceId, driverConfigJson), driverInstanceId,
logger: loggerFactory?.CreateLogger<S7Driver>());
} }
/// <summary> /// <summary>
@@ -226,7 +226,7 @@ public static class DriverFactoryBootstrap
// task, so the Tier A 5s Subscribe budget never covers the stream's lifetime. // task, so the Tier A 5s Subscribe budget never covers the stream's lifetime.
Driver.MTConnect.MTConnectDriverFactoryExtensions.Register(registry, loggerFactory); Driver.MTConnect.MTConnectDriverFactoryExtensions.Register(registry, loggerFactory);
Driver.OpcUaClient.OpcUaClientDriverFactoryExtensions.Register(registry, loggerFactory, secretResolver); Driver.OpcUaClient.OpcUaClientDriverFactoryExtensions.Register(registry, loggerFactory, secretResolver);
Driver.S7.S7DriverFactoryExtensions.Register(registry); Driver.S7.S7DriverFactoryExtensions.Register(registry, loggerFactory);
Driver.Sql.SqlDriverFactoryExtensions.Register(registry, loggerFactory); Driver.Sql.SqlDriverFactoryExtensions.Register(registry, loggerFactory);
Driver.TwinCAT.TwinCATDriverFactoryExtensions.Register(registry); Driver.TwinCAT.TwinCATDriverFactoryExtensions.Register(registry);
} }