I would like to make a class that can store at most one copy of an object. All the objects stored here will share the same base class, and I would like to be able to get an object based on it's type.
I've come up with this solution so far, but I feel like I'm doing something wrong with using a Type for the Dictionary key.
Base class used in multiple modules
interface ISessionVariables { }
Example of common singleton class used for accessing
public class SessionVariables
{
private object _sync = new object();
private Dictionary<Type, ISessionVariables> _sessionVariables =
new Dictionary<Type, ISessionVariables>;
public T Get<T>()
where T : ISessionVariable, new()
{
lock (_sync)
{
ISessionVariables rtnValue = null;
if (_sessionVariables.TryGetValue(typeof(T), out rtnValue))
return (T)rtnValue;
rtnValue = new T();
_sessionVariables.Add(typeof(T), rtnValue);
return (T)rtnValue;
}
}
}
This way I can call it like this from individual modules
SessionVariableSingleton.Get<ModuleASessionVars>().PropertyA;
SessionVariableSingleton.Get<ModuleCSessionVars>().PropertyC;
Is this an acceptable way of storing this kind of data structure? Or is there a better alternative using a List or a dictionary without a Type key?
Type
instead. – Vardon