using System; using SHJX.Service.Common.ReadXML; using SHJX.Service.Control.Interface; using System.Collections.Concurrent; using SHJX.Service.Common.Logging; using Microsoft.Extensions.Logging; namespace SHJX.Service.Control.TimerControl.ChangeTaskState { public class ChangeStateFactory { private static readonly ILogger logger = LogFactory.BuildLogger(typeof(ChangeStateFactory)); private readonly ReadConfigUtil _config; private readonly ConcurrentDictionary _writeTasks = new ConcurrentDictionary(); public ChangeStateFactory( ReadConfigUtil config) { _config = config; } /// /// 获取任务下发类 /// /// /// public ChangeTaskStateImp Get(string opKey) { try { if (_writeTasks.TryGetValue(opKey, out var writeTask)) return writeTask; ChangeTaskStateImp writeTaskOperate = opKey switch { "Sample" => new SampleChangeState(_config), //样品 "Calibration" => new CalibrationChangeState(_config), //标定 "Wash" => new WashChangeState(_config), //润洗 _ => throw new ArgumentNullException() }; _writeTasks.TryAdd(opKey, writeTaskOperate); return writeTaskOperate; } catch (Exception ex) { logger.LogError(ex.ToString()); return null; } } } }