Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }