public static IConfigurationBuilder InterceptSource( this IConfigurationBuilder builder, IConfigurationSource source, IList <IInterceptor> interceptors = null) { int sourceIndex = builder.Sources.IndexOf(source); builder.Sources[sourceIndex] = ConfigurationSourceProxy.Create(source, interceptors); return(builder); }
public static IConfigurationBuilder Create(IConfigurationBuilder decorated) { var proxy = Create <IConfigurationBuilder, ConfigurationBuilderProxy>(); ((ConfigurationBuilderProxy)proxy).decoratedBuilder = decorated; var replacement = decorated.Sources.ToList(); decorated.Sources.Clear(); replacement.ForEach(source => decorated.Sources.Add(ConfigurationSourceProxy.Create(source))); return(proxy); }
protected override object Invoke(MethodInfo targetMethod, object[] args) { object result; if ("Add" == targetMethod.Name) { IConfigurationSource src = (IConfigurationSource)args[0]; if (src.GetType() != typeof(ConfigurationSourceProxy)) { args[0] = ConfigurationSourceProxy.Create(src); } } result = targetMethod.Invoke(decoratedBuilder, args); return(result); }
public static IConfigurationBuilder RegisterGlobalInterceptor( this IConfigurationBuilder builder, IInterceptor interceptor) { var interceptors = new List <IInterceptor>(); if (builder.Properties.ContainsKey(Constants.BuilderInterceptorKey)) { interceptors = (List <IInterceptor>)builder.Properties[Constants.BuilderInterceptorKey]; } interceptors.Add(interceptor); builder.Properties[Constants.BuilderInterceptorKey] = interceptors; //Clone existing sources var newSources = builder.Sources.ToList(); builder.Sources.Clear(); newSources.ForEach(source => builder.Sources.Add(ConfigurationSourceProxy.Create(source))); return(builder); }
public static IConfigurationSource Create(IConfigurationSource decorated, IList <IInterceptor> interceptors = null) { if (typeof(ConfigurationSourceProxy).IsAssignableFrom(decorated.GetType())) { if (interceptors != null) { ConfigurationSourceProxy interceptProxy = (ConfigurationSourceProxy)decorated; foreach (IInterceptor i in interceptors) { interceptProxy.AddInterceptor(i); } } return(decorated); } var proxy = Create <IConfigurationSource, ConfigurationSourceProxy>(); ((ConfigurationSourceProxy)proxy).decoratedSource = decorated; ((ConfigurationSourceProxy)proxy).interceptors = interceptors; return(proxy); }