/// <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> /// Clear a service override of the service specified. /// </summary> /// <param name="serviceId">Service ID that service override to be cleard.</param> public void ClearServiceOverride(Guid serviceId) { lock (ServiceOverrideLock) { if (OverriddenServiceMap.Remove(serviceId)) { ServiceOverrideCleard?.Invoke(this, serviceId); } } }
/// <summary> /// Clear all service overrides. /// </summary> public void ClearServiceOverrides() { lock (ServiceOverrideLock) { var serviceIds = OverriddenServiceMap.Keys; OverriddenServiceMap.Clear(); foreach (var serviceId in serviceIds) { ServiceOverrideCleard?.Invoke(this, serviceId); } } }
/// <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); } } }