public void AddServantLocator(Ice.IServantLocator locator, string category) { lock (this) { Debug.Assert(_communicator != null); // Must not be called after destruction. if (_locatorMap.ContainsKey(category)) { throw new ArgumentException($"A servant locator for category {category} is already registered", nameof(category)); } _locatorMap[category] = locator; } }
// // Only for use by Ice.ObjectAdapterI. // public void Destroy() { Dictionary <string, Ice.IServantLocator> locatorMap; Ice.ILogger logger; lock (this) { // // If the ServantManager has already been destroyed, we're done. // if (_communicator == null) { return; } logger = _communicator.Logger; _servantMapMap.Clear(); _defaultServantMap.Clear(); locatorMap = new Dictionary <string, Ice.IServantLocator>(_locatorMap); _locatorMap.Clear(); _communicator = null; } foreach (KeyValuePair <string, Ice.IServantLocator> p in locatorMap) { Ice.IServantLocator locator = p.Value; try { locator.Deactivate(p.Key); } catch (System.Exception ex) { string s = "exception during locator deactivation:\n" + "object adapter: `" + _adapterName + "'\n" + "locator category: `" + p.Key + "'\n" + ex; logger.Error(s); } } }