public void RemoveForeman(string ForemanId) { // prevent removal if foreman is connected to another foreman if (foremen == null) { return; } try { // unload if ForemanLoader IForeman foreman; if (foremen.TryRemove(ForemanId, out foreman)) { ForemanLoader.Unload((ForemanLoader)foreman); } foreman = null; } catch { } //GC.Collect(); }
private void AddForeman(string ForemanId, string ConfigString, ForemanConfigurationFile Config) { IForeman foreman; if (foremen.TryGetValue(ForemanId, out foreman)) { throw new Exception("ForemanId already added"); } if (ForemanId == null) { throw new ArgumentNullException("ForemanId"); } if (ForemanId.Length < 3 || ForemanId.Length > 15) { throw new ArgumentException("ForemanId must be 3-15 characters in length"); } if (!RegexAlphaNumeric.IsMatch(ForemanId)) { throw new ArgumentException("ForemanId must contain only alpha-numeric characters"); } if (IsDisposed) { throw new ObjectDisposedException("Contractor"); } if (ForemanId == null || ForemanId.Length == 0) { throw new ArgumentException("ForemanId"); } if (Config == null) { if (ConfigString == null || ConfigString.Length == 0) { throw new ArgumentException("ConfigString"); } } if (foremen.ContainsKey(ForemanId)) { throw new Exception(ForemanId + " was already added"); } foreman = ForemanLoader.CreateInstance(ForemanId, ConfigString, Config, Settings); foremen.AddOrUpdate(ForemanId, foreman, (k, v) => foreman); }