private static ProxyGeneratorResult GenerateProxy(
            Type typeOfProxy,
            ProxyGenerationOptions options,
            IEnumerable<Type> additionalInterfacesToImplement,
            IEnumerable<object> argumentsForConstructor,
            IFakeCallProcessorProvider fakeCallProcessorProvider)
        {
            Guard.AgainstNull(typeOfProxy, nameof(typeOfProxy));
            Guard.AgainstNull(additionalInterfacesToImplement, nameof(additionalInterfacesToImplement));
            Guard.AgainstNull(fakeCallProcessorProvider, nameof(fakeCallProcessorProvider));

            if (typeOfProxy.GetTypeInfo().IsValueType)
            {
                return GetProxyResultForValueType(typeOfProxy);
            }

            if (typeOfProxy.GetTypeInfo().IsSealed)
            {
                return new ProxyGeneratorResult(DynamicProxyResources.ProxyIsSealedTypeMessage.FormatInvariant(typeOfProxy));
            }

            GuardAgainstConstructorArgumentsForInterfaceType(typeOfProxy, argumentsForConstructor);

            return CreateProxyGeneratorResult(typeOfProxy, options, additionalInterfacesToImplement, argumentsForConstructor, fakeCallProcessorProvider);
        }
 public virtual ProxyGeneratorResult GenerateProxy(
     Type typeOfProxy,
     IEnumerable<Type> additionalInterfacesToImplement,
     IEnumerable<object> argumentsForConstructor,
     IEnumerable<CustomAttributeBuilder> customAttributeBuilders,
     IFakeCallProcessorProvider fakeCallProcessorProvider)
 {
     return this.GenerateProxy(typeOfProxy, additionalInterfacesToImplement, argumentsForConstructor, fakeCallProcessorProvider);
 }
 public ProxyGeneratorResult GenerateProxy(
     Type typeOfProxy,
     IEnumerable<Type> additionalInterfacesToImplement,
     IEnumerable<object> argumentsForConstructor,
     IFakeCallProcessorProvider fakeCallProcessorProvider)
 {
     var options = CreateProxyGenerationOptions();
     return GenerateProxy(typeOfProxy, options, additionalInterfacesToImplement, argumentsForConstructor, fakeCallProcessorProvider);
 }
        public ProxyGeneratorResult GenerateProxy(
            Type typeOfProxy,
            IEnumerable<Type> additionalInterfacesToImplement,
            IEnumerable<object> argumentsForConstructor,
            IEnumerable<CustomAttributeBuilder> customAttributeBuilders,
            IFakeCallProcessorProvider fakeCallProcessorProvider)
        {
            Guard.AgainstNull(customAttributeBuilders, nameof(customAttributeBuilders));

            var options = CreateProxyGenerationOptions();
            foreach (CustomAttributeBuilder builder in customAttributeBuilders)
            {
                options.AdditionalAttributes.Add(builder);
            }

            return GenerateProxy(typeOfProxy, options, additionalInterfacesToImplement, argumentsForConstructor, fakeCallProcessorProvider);
        }
        public ProxyGeneratorResult GenerateProxy(
            Type typeOfProxy,
            IEnumerable<Type> additionalInterfacesToImplement,
            IEnumerable<object> argumentsForConstructor,
            IEnumerable<Expression<Func<Attribute>>> attributes,
            IFakeCallProcessorProvider fakeCallProcessorProvider)
        {
            Guard.AgainstNull(attributes, nameof(attributes));

            var options = CreateProxyGenerationOptions();
            foreach (var attribute in attributes)
            {
                options.AdditionalAttributes.Add(CustomAttributeInfo.FromExpression(attribute));
            }

            return GenerateProxy(typeOfProxy, options, additionalInterfacesToImplement, argumentsForConstructor, fakeCallProcessorProvider);
        }
        public ProxyGeneratorResult GenerateProxy(
            Type typeOfProxy,
            IEnumerable<Type> additionalInterfacesToImplement,
            IEnumerable<object> argumentsForConstructor,
            IEnumerable<CustomAttributeBuilder> customAttributeBuilders,
            IFakeCallProcessorProvider fakeCallProcessorProvider)
        {
            Guard.AgainstNull(customAttributeBuilders, "customAttributeBuilders");
            Guard.AgainstNull(fakeCallProcessorProvider, "fakeCallProcessorProvider");

            ProxyGenerationOptions.AdditionalAttributes.Clear();
            foreach (CustomAttributeBuilder builder in customAttributeBuilders)
            {
                ProxyGenerationOptions.AdditionalAttributes.Add(builder);
            }

            return this.GenerateProxy(typeOfProxy, additionalInterfacesToImplement, argumentsForConstructor, fakeCallProcessorProvider);
        }
        public virtual ProxyGeneratorResult GenerateProxy(
            Type typeOfProxy,
            IEnumerable<Type> additionalInterfacesToImplement,
            IEnumerable<object> argumentsForConstructor,
            IFakeCallProcessorProvider fakeCallProcessorProvider)
        {
            Guard.AgainstNull(typeOfProxy, nameof(typeOfProxy));

            if (!typeof(Delegate).IsAssignableFrom(typeOfProxy))
            {
                return new ProxyGeneratorResult("The delegate proxy generator can only create proxies for delegate types.");
            }

            var invokeMethod = typeOfProxy.GetMethod("Invoke");
            var eventRaiser = new DelegateCallInterceptedEventRaiser(fakeCallProcessorProvider, invokeMethod, typeOfProxy);

            fakeCallProcessorProvider.EnsureInitialized(eventRaiser.Instance);
            return new ProxyGeneratorResult(eventRaiser.Instance);
        }
 public ProxyInterceptor(IFakeCallProcessorProvider fakeCallProcessorProvider)
 {
     this.fakeCallProcessorProvider = fakeCallProcessorProvider;
 }
 public DelegateCallInterceptedEventRaiser(IFakeCallProcessorProvider fakeCallProcessorProvider, MethodInfo method, Type type)
 {
     this.fakeCallProcessorProvider = fakeCallProcessorProvider;
     this.method = method;
     this.Instance = CreateDelegateProxy(type, method, this);
 }
Пример #10
0
        public ProxyGeneratorResult GenerateProxy(Type typeOfProxy, System.Collections.Generic.IEnumerable <Type> additionalInterfacesToImplement, System.Collections.Generic.IEnumerable <object> argumentsForConstructor, IFakeCallProcessorProvider fakeCallProcessorProvider)
        {
            var generator = this.SelectProxyGenerator(typeOfProxy);

            return(generator.GenerateProxy(typeOfProxy, additionalInterfacesToImplement, argumentsForConstructor, fakeCallProcessorProvider));
        }
        private static ProxyGeneratorResult CreateProxyGeneratorResult(
            Type typeOfProxy,
            ProxyGenerationOptions options,
            IEnumerable<Type> additionalInterfacesToImplement,
            IEnumerable<object> argumentsForConstructor,
            IFakeCallProcessorProvider fakeCallProcessorProvider)
        {
            var interceptor = new ProxyInterceptor(fakeCallProcessorProvider);
            object proxy;

            try
            {
                proxy = DoGenerateProxy(
                    typeOfProxy,
                    options,
                    additionalInterfacesToImplement,
                    argumentsForConstructor,
                    interceptor);
            }
            catch (Exception e)
            {
                return GetResultForFailedProxyGeneration(typeOfProxy, argumentsForConstructor, e);
            }

            fakeCallProcessorProvider.EnsureInitialized(proxy);

            return new ProxyGeneratorResult(generatedProxy: proxy);
        }
 public ProxyInterceptor(IFakeCallProcessorProvider fakeCallProcessorProvider)
 {
     this.fakeCallProcessorProvider = fakeCallProcessorProvider;
 }
 public DelegateCallInterceptedEventRaiser(IFakeCallProcessorProvider fakeCallProcessorProvider, MethodInfo method, Type type)
 {
     this.fakeCallProcessorProvider = fakeCallProcessorProvider;
     this.method   = method;
     this.Instance = CreateDelegateProxy(type, method, this);
 }
        private static ProxyGeneratorResult CreateProxyGeneratorResult(Type typeOfProxy, IEnumerable <Type> additionalInterfacesToImplement, IEnumerable <object> argumentsForConstructor, IFakeCallProcessorProvider fakeCallProcessorProvider)
        {
            var    interceptor = new ProxyInterceptor(fakeCallProcessorProvider);
            object proxy;

            try
            {
                proxy = DoGenerateProxy(
                    typeOfProxy,
                    additionalInterfacesToImplement,
                    argumentsForConstructor,
                    interceptor);
            }
            catch (Exception e)
            {
                return(GetResultForFailedProxyGeneration(typeOfProxy, argumentsForConstructor, e));
            }

            fakeCallProcessorProvider.EnsureInitialized(proxy);

            return(new ProxyGeneratorResult(generatedProxy: proxy));
        }
        public ProxyGeneratorResult GenerateProxy(Type typeOfProxy, IEnumerable <Type> additionalInterfacesToImplement, IEnumerable <object> argumentsForConstructor, IFakeCallProcessorProvider fakeCallProcessorProvider)
        {
            Guard.AgainstNull(typeOfProxy, "typeOfProxy");
            Guard.AgainstNull(additionalInterfacesToImplement, "additionalInterfacesToImplement");
            Guard.AgainstNull(fakeCallProcessorProvider, "fakeCallProcessorProvider");

            if (typeOfProxy.IsValueType)
            {
                return(GetProxyResultForValueType(typeOfProxy));
            }

            if (typeOfProxy.IsSealed)
            {
                return(new ProxyGeneratorResult(DynamicProxyResources.ProxyIsSealedTypeMessage.FormatInvariant(typeOfProxy)));
            }

            GuardAgainstConstructorArgumentsForInterfaceType(typeOfProxy, argumentsForConstructor);

            return(CreateProxyGeneratorResult(typeOfProxy, additionalInterfacesToImplement, argumentsForConstructor, fakeCallProcessorProvider));
        }
Пример #16
0
        public ProxyGeneratorResult GenerateProxy(Type typeOfProxy, IEnumerable <Type> additionalInterfacesToImplement, IEnumerable <object> argumentsForConstructor, IEnumerable <Expression <Func <Attribute> > > attributes, IFakeCallProcessorProvider fakeCallProcessorProvider)
        {
            var generator = this.SelectProxyGenerator(typeOfProxy);

            return(generator.GenerateProxy(typeOfProxy, additionalInterfacesToImplement, argumentsForConstructor, attributes, fakeCallProcessorProvider));
        }
Пример #17
0
 public DelegateCallInterceptedEventRaiser(IFakeCallProcessorProvider fakeCallProcessorProvider)
 {
     this.fakeCallProcessorProvider = fakeCallProcessorProvider;
 }
 public DelegateCallInterceptedEventRaiser(IFakeCallProcessorProvider fakeCallProcessorProvider)
 {
     this.fakeCallProcessorProvider = fakeCallProcessorProvider;
 }
Пример #19
0
        public virtual ProxyGeneratorResult GenerateProxy(
            Type typeOfProxy, IEnumerable <Type> additionalInterfacesToImplement, IEnumerable <object> argumentsForConstructor, IFakeCallProcessorProvider fakeCallProcessorProvider)
        {
            Guard.AgainstNull(typeOfProxy, "typeOfProxy");

            if (!typeof(Delegate).IsAssignableFrom(typeOfProxy))
            {
                return
                    (new ProxyGeneratorResult("The delegate proxy generator can only create proxies for delegate types."));
            }

            var invokeMethod = typeOfProxy.GetMethod("Invoke");

            var eventRaiser = new DelegateCallInterceptedEventRaiser(fakeCallProcessorProvider);

            var proxy = CreateDelegateProxy(typeOfProxy, invokeMethod, eventRaiser);

            eventRaiser.Method   = invokeMethod;
            eventRaiser.Instance = proxy;

            fakeCallProcessorProvider.EnsureInitialized(proxy);

            return(new ProxyGeneratorResult(proxy));
        }
Пример #20
0
        public ProxyGeneratorResult GenerateProxy(Type typeOfProxy, System.Collections.Generic.IEnumerable<Type> additionalInterfacesToImplement, System.Collections.Generic.IEnumerable<object> argumentsForConstructor, IFakeCallProcessorProvider fakeCallProcessorProvider)
        {
            var generator = this.SelectProxyGenerator(typeOfProxy);

            return generator.GenerateProxy(typeOfProxy, additionalInterfacesToImplement, argumentsForConstructor, fakeCallProcessorProvider);
        }
Пример #21
0
        public ProxyGeneratorResult GenerateProxy(Type typeOfProxy, IEnumerable<Type> additionalInterfacesToImplement, IEnumerable<object> argumentsForConstructor, IEnumerable<Expression<Func<Attribute>>> attributes, IFakeCallProcessorProvider fakeCallProcessorProvider)
        {
            var generator = this.SelectProxyGenerator(typeOfProxy);

            return generator.GenerateProxy(typeOfProxy, additionalInterfacesToImplement, argumentsForConstructor, attributes, fakeCallProcessorProvider);
        }