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);
}
}