Разрабатываю игру наподобие HearthStone. Есть состояние стола
public class Table
    {
        public Table()
        {
            Players = new List<PlayerModel>();
        }
        public List<PlayerModel> Players { get; set; }
        public int Queue { get; set; }
    }
И есть некий диспетчер триггеров, который оповещает о том, что в игре произошло какое-либо событие (карта атакована, сыграно заклинание и т.д)
public class TriggerDispatcher
    {
        public TriggerDispatcher()
        {
            if (Triggers == null)
                Triggers = new Dictionary<string, ITrigger>();
        }
        public ITrigger GetTrigger<T>() where T : ITrigger
        {
            if (Triggers.ContainsKey(typeof(T).Name))
                return Triggers[typeof(T).Name];
            var trigger = Activator.CreateInstance<T>();
            Triggers.Add(typeof(T).Name, trigger);
            return trigger;
        }
        public Dictionary<string, ITrigger> Triggers { get; }
    }
    public interface ITrigger
    {
        void AddAction(IAction action);
        void RemoveAction(IAction action);
        void ExecuteActions(object param);
    }
Нужно, чтобы эти два класса были доступны из любого места в пределах одной сессии. На сервере создаются сессии состоящие из двух игроков и для них создаются экземпляры стола и диспетчера. Как организовать их получение в других местах кода в пределах сессии?