ChangeStateFactory.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. using System;
  2. using SHJX.Service.Common.ReadXML;
  3. using SHJX.Service.Control.Interface;
  4. using System.Collections.Concurrent;
  5. using SHJX.Service.Common.Logging;
  6. using Microsoft.Extensions.Logging;
  7. namespace SHJX.Service.Control.TimerControl.ChangeTaskState
  8. {
  9. public class ChangeStateFactory
  10. {
  11. private static readonly ILogger logger = LogFactory.BuildLogger(typeof(ChangeStateFactory));
  12. private readonly ReadConfigUtil _config;
  13. private readonly ConcurrentDictionary<string, ChangeTaskStateImp> _writeTasks = new ConcurrentDictionary<string, ChangeTaskStateImp>();
  14. public ChangeStateFactory( ReadConfigUtil config)
  15. {
  16. _config = config;
  17. }
  18. /// <summary>
  19. /// 获取任务下发类
  20. /// </summary>
  21. /// <param name="opKey"></param>
  22. /// <returns></returns>
  23. public ChangeTaskStateImp Get(string opKey)
  24. {
  25. try
  26. {
  27. if (_writeTasks.TryGetValue(opKey, out var writeTask))
  28. return writeTask;
  29. ChangeTaskStateImp writeTaskOperate = opKey switch
  30. {
  31. "Sample" => new SampleChangeState(_config), //样品
  32. "Calibration" => new CalibrationChangeState(_config), //标定
  33. "Wash" => new WashChangeState(_config), //润洗
  34. _ => throw new ArgumentNullException()
  35. };
  36. _writeTasks.TryAdd(opKey, writeTaskOperate);
  37. return writeTaskOperate;
  38. }
  39. catch (Exception ex)
  40. {
  41. logger.LogError(ex.ToString());
  42. return null;
  43. }
  44. }
  45. }
  46. }