private static void CheckAllReferencedProviders(IEnumerable <LoggingProviderBase> referencedProviders, LoggingProviderChain chain) { // Most of the time referenced providers are simply fallback providers. foreach (var provider in referencedProviders) { ValidateProvider(provider, chain); } }
private static void ValidateProvider(LoggingProviderBase provider, LoggingProviderChain chain) { ThrowWhenProviderIsInChain(provider, chain); // Note that LoggingProviderChain is immutable. Adding involves creating a new instance. var chainWithProvider = chain.Add(provider); CheckAllReferencedProviders(provider.GetReferencedProviders(), chainWithProvider); }
private static void ThrowWhenProviderIsInChain(LoggingProviderBase providerToValidate, LoggingProviderChain providersInChain) { // Check whether the supplied provider is already directly or indirectly referencing itself. bool providerIsSelfReferenced = providersInChain.Contains(providerToValidate); if (providerIsSelfReferenced) { throw new ConfigurationErrorsException( SR.CircularReferenceInLoggingSection(Logger.SectionName, providerToValidate.Name)); } }
private LoggingProviderChain(LoggingProviderBase provider, LoggingProviderChain list) { this.provider = provider; this.list = list; }