/// <summary> /// Get component object for a service specified. /// </summary> /// <param name="serviceId">Service ID</param> /// <returns>Overriding component object for the service</returns> public IComponent GetOverridingComponent(Guid serviceId) { lock (ServiceOverrideLock) { IComponent result; OverriddenServiceMap.TryGetValue(serviceId, out result); return(result); } }
/// <summary> /// Override some service by a component specified. /// </summary> /// <param name="serviceId">Id of the service to be overridden.</param> /// <param name="component">Component</param> public void OverrideService(Guid serviceId, IComponent component) { if (component == null) { throw new ArgumentNullException(nameof(component)); } lock (ServiceOverrideLock) { IComponent oldValue; var isChanged = OverriddenServiceMap.TryGetValue(serviceId, out oldValue) ? oldValue == component : true; if (isChanged) { OverriddenServiceMap[serviceId] = component; ServiceOverrided?.Invoke(this, serviceId); } } }