Refactor
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user