internal static void RecordHost(this IServiceHost host, ServiceBase service) { lock (_hostLock) { IServiceHost dontcare; // if it is in the list and not disposed of, theres a problem if (_hosts.ContainsKey(service.GetHashCode()) && _hosts[service.GetHashCode()].TryGetTarget(out dontcare)) { throw new ArgumentException("An instance of this service has already been hosted."); } else { _hosts.Add(service.GetHashCode(), new WeakReference<IServiceHost>(host)); // add to list } } }
internal static void RemoveHost(this IServiceHost host, ServiceBase service) { lock (_hostLock) { IServiceHost outedHost; if (_hosts.ContainsKey(service.GetHashCode()) && _hosts[service.GetHashCode()].TryGetTarget(out outedHost) && outedHost == host) { _hosts.Remove(service.GetHashCode()); } } }