55 lines
1.2 KiB
C#
55 lines
1.2 KiB
C#
using Core.Utils.Cloners;
|
|
using SptCommon.Annotations;
|
|
|
|
namespace Core.Services;
|
|
|
|
[Injectable(InjectionType.Singleton)]
|
|
public class InMemoryCacheService(
|
|
ICloner _cloner
|
|
)
|
|
{
|
|
protected Dictionary<string, object?> _cacheData = new();
|
|
|
|
// Store data into an in-memory object
|
|
// key to store data against
|
|
// Data to store in cache
|
|
public void StoreByKey<T>(string key, T dataToCache)
|
|
{
|
|
_cacheData[key] = _cloner.Clone(dataToCache);
|
|
}
|
|
|
|
// Retrieve data stored by a key
|
|
// key
|
|
// Stored data
|
|
public T? GetDataByKey<T>(string key)
|
|
{
|
|
if (_cacheData.ContainsKey(key))
|
|
{
|
|
return (T) _cacheData[key];
|
|
}
|
|
|
|
return default;
|
|
}
|
|
|
|
// Does data exist against the provided key
|
|
// Key to check for data against
|
|
// true if exists
|
|
public bool HasStoredDataByKey(string key)
|
|
{
|
|
return _cacheData.ContainsKey(key);
|
|
}
|
|
|
|
// Remove data stored against key
|
|
// Key to remove data against
|
|
public void ClearDataStoredByKey(string key)
|
|
{
|
|
_cacheData.Remove(key);
|
|
}
|
|
|
|
// Remove all data stored
|
|
public void ClearCache()
|
|
{
|
|
_cacheData.Clear();
|
|
}
|
|
}
|