/// <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);
        }
Exemple #2
0
 private static ServiceInfoCreator GetServiceInfoCreator(IConfiguration config)
 {
     if (Platform.IsCloudFoundry)
     {
         return(CloudFoundryServiceInfoCreator.Instance(config));
     }
     else
     {
         return(ServiceInfoCreator.Instance(config));
     }
 }