namespace DS.Module.Core.Data { /// /// 任务模块之间用于传入、获取数据的容器 /// public class TaskFlowDataContext { private readonly Dictionary dataContext = new(); /// /// /// public TaskFlowDataContext(string key, object? value) { dataContext.Add(key, value); } /// /// /// public TaskFlowDataContext(params (string key, object? value)[] keyValues) { foreach (var item in keyValues) { dataContext.Add(item.key, item.value); } } public IReadOnlyCollection Keys => dataContext.Keys; public object? this[string key] { get { return dataContext[key]; } set { dataContext[key] = value; } } /// /// /// public void Set(string key, object? value) { if (ContainsKey(key)) { dataContext[key] = value; } else { dataContext.Add(key, value); } } /// /// /// public T? Get(string key) { if (dataContext.ContainsKey(key)) { var value = dataContext[key]; if (value is T t) { return t; } else if (value != null) { return (T)Convert.ChangeType(value, typeof(T)); } } return default; } /// /// /// public T? GetOrDefault(string key) { return GetOrDefault(key, default); } /// /// /// public T GetOrDefault(string key, T defaultValue) { if (dataContext.TryGetValue(key, out var value)) { if (value is T t) { return t; } else if (value != null) { return (T)Convert.ChangeType(value, typeof(T)); } } return defaultValue; } /// /// /// /// /// /// public bool TryGetValue(string key, out object value) { return dataContext.TryGetValue(key, out value); } /// /// /// public bool ContainsKey(string key) => dataContext.ContainsKey(key); } }