/// <summary> /// Creates a singleton instance or throws if instance is already created /// </summary> public ZoneGovernorService() : base(null) { if (!AgniSystem.IsMetabase) { throw new AZGOVException(StringConsts.METABASE_NOT_AVAILABLE_ERROR.Args(GetType().FullName + ".ctor()")); } lock (s_InstanceLock) { if (s_Instance != null) { throw new AZGOVException(StringConsts.AZGOV_INSTANCE_ALREADY_ALLOCATED_ERROR); } m_SubInstr = new InstrumentationService(this); m_SubInstrReductionLevels = new Dictionary <string, int>(); m_SubInstrCallers = new ConcurrentDictionary <string, DateTime>(); m_SubLog = new LogService(this); m_SubHosts = new Registry <Contracts.HostInfo>(); m_DynamicHostSlots = new Registry <Contracts.DynamicHostInfo>(); m_Locker = new Locking.Server.LockServerService(this); s_Instance = this; } }
protected override void Destructor() { lock (s_InstanceLock) { base.Destructor(); s_Instance = null; m_Locker.Dispose(); var sis = m_SubInstr; if (sis != null) { m_SubInstr = null; sis.Dispose(); } var slg = m_SubLog; if (slg != null) { m_SubLog = null; slg.Dispose(); } } }