/// <summary> /// Build or return the relevant <see cref="ServiceInfoCreator"/> /// </summary> /// <param name="configuration">Application <see cref="IConfiguration"/></param> /// <returns>Singleton <see cref="ServiceInfoCreator"/></returns> internal static ServiceInfoCreator GetServiceInfoCreator(IConfiguration configuration) { if (configuration is null) { throw new ArgumentNullException(nameof(configuration)); } lock (_lock) { if (serviceInfoCreator is object && configuration == serviceInfoCreator.Configuration && (bool)serviceInfoCreator.GetType().GetProperty("IsRelevant").GetValue(null)) { return(serviceInfoCreator); } var alternateInfoCreators = ReflectionHelpers.FindTypeFromAssemblyAttribute <ServiceInfoCreatorAssemblyAttribute>(); foreach (var alternateInfoCreator in alternateInfoCreators) { if ((bool)alternateInfoCreator.GetProperty("IsRelevant").GetValue(null)) { serviceInfoCreator = (ServiceInfoCreator)alternateInfoCreator.GetMethod("Instance").Invoke(null, new[] { configuration }); return(serviceInfoCreator); } } serviceInfoCreator = ServiceInfoCreator.Instance(configuration); } return(serviceInfoCreator); }
private static ServiceInfoCreator GetServiceInfoCreator(IConfiguration config) { if (Platform.IsCloudFoundry) { return(CloudFoundryServiceInfoCreator.Instance(config)); } else { return(ServiceInfoCreator.Instance(config)); } }