Files
2022-11-01 15:26:08 +00:00

34 lines
1.4 KiB
C#

using TheXamlGuy.Framework.Core;
using TheXamlGuy.Framework.Serial;
namespace TheXamlGuy.Framework.Microcontroller;
public class MicrocontrollerFactory : IMicrocontrollerFactory
{
private readonly IServiceFactory factory;
private readonly ISerialFactory serialFactory;
private readonly Dictionary<ISerialConfiguration, IMicrocontrollerContext> cache = new();
public MicrocontrollerFactory(IServiceFactory factory,
ISerialFactory serialFactory)
{
this.factory = factory;
this.serialFactory = serialFactory;
}
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;
}
}