Files
Toolkit2/Toolkit.Foundation/MicrocontrollerFactory.cs
T
2025-02-07 09:20:43 +00:00

24 lines
1.1 KiB
C#

namespace Toolkit.Foundation;
public class MicrocontrollerFactory(IServiceFactory factory,
ISerialFactory serialFactory) :
IMicrocontrollerFactory
{
private readonly Dictionary<ISerialConfiguration, IMicrocontrollerContext> cache = new();
public IMicrocontrollerContext<TRead, TReadDeserializer> Create<TSerialReader, TRead, TReadDeserializer>(IMicrocontrollerConfiguration configuration, IReadOnlyCollection<IMicrocontrollerModuleDescriptor> modules) where TSerialReader : SerialReader<TRead> where TReadDeserializer : IMicrocontrollerModuleDeserializer<TRead>, new()
{
if (cache.TryGetValue(configuration, out IMicrocontrollerContext? context))
{
return (IMicrocontrollerContext<TRead, TReadDeserializer>)context;
}
ISerialContext<TSerialReader, TRead> serialContext = serialFactory.Create<TSerialReader, TRead>(configuration);
context = factory.Create<MicrocontrollerContext<TRead, TReadDeserializer>>(modules, serialContext);
cache.Add(configuration, context);
return (IMicrocontrollerContext<TRead, TReadDeserializer>)context;
}
}