This commit is contained in:
Dan Clark
2025-02-09 13:51:25 +00:00
parent f2e501454e
commit 0afe621f59
22 changed files with 147 additions and 122 deletions
+26 -18
View File
@@ -1,31 +1,39 @@
using System.IO.Ports;
using Microsoft.Extensions.DependencyInjection;
using System.IO.Ports;
namespace Toolkit.Foundation;
public class SerialFactory(IServiceFactory factory) :
public class SerialFactory(IServiceProvider provider,
IServiceFactory factory) :
ISerialFactory
{
private readonly Dictionary<ISerialConfiguration, ISerialContext> cache = [];
public ISerialContext<TSerialReader, TContent> Create<TSerialReader, TContent>(ISerialConfiguration configuration)
where TSerialReader : SerialReader<TContent>
public ISerialContext<TReader, TRead>? Create<TConfiguration, TReader, TRead>()
where TConfiguration : ISerialConfiguration
where TReader : SerialReader<TRead>
{
if (cache.TryGetValue(configuration, out ISerialContext? context))
if (provider.GetRequiredService<TConfiguration>() is TConfiguration configuration)
{
return (ISerialContext<TSerialReader, TContent>)context;
if (cache.TryGetValue(configuration, out ISerialContext? context))
{
return (ISerialContext<TReader, TRead>)context;
}
SerialPort serialPort = new(configuration.PortName, configuration.BaudRate)
{
DtrEnable = true
};
SerialConnection connection = new(serialPort);
SerialStreamer streamer = new(serialPort);
context = factory.Create<SerialContext<TReader, TRead>>(connection, streamer);
cache.Add(configuration, context);
return (ISerialContext<TReader, TRead>)context;
}
SerialPort serialPort = new(configuration.PortName, configuration.BaudRate)
{
DtrEnable = true
};
SerialConnection connection = new(serialPort);
SerialStreamer streamer = new(serialPort);
context = factory.Create<SerialContext<TSerialReader, TContent>>(connection, streamer);
cache.Add(configuration, context);
return (ISerialContext<TSerialReader, TContent>)context;
return default;
}
}