Beispiel #1
0
        public void ParameterInterceptor()
        {
            var proxy = (ParameterInterceptorTestClass)DynamicActivator.CreateInstance(typeof(ParameterInterceptorTestClass));

            /// Foo方法执行时对方法参数进行拦截
            proxy.Foo(null, 123);
        }
        public void ActivateStandardTypeParameters()
        {
            var activator = new DynamicActivator(typeof(ActivationClass), typeof(int), typeof(int), typeof(string));
            var instance  = activator.Activate(1, 2, "Hello World") as ActivationClass;

            Assert.NotNull(instance);
            Assert.Equal(1, instance.Constructor);
        }
        public void ActivateParameterLess()
        {
            var activator = new DynamicActivator(typeof(ActivationClass));
            var instance  = activator.Activate() as ActivationClass;

            Assert.NotNull(instance);
            Assert.Equal(0, instance.Constructor);
        }
        public void CreateInstanceOfDefault()
        {
            ///使用指定类型的默认构造函数来创建该类型的代理实例。
            var proxy = DynamicActivator.CreateInstance(typeof(UserRepository));

            Assert.IsNotNull(proxy);
            Assert.IsInstanceOfType(proxy, typeof(UserRepository));
        }
Beispiel #5
0
        public void ReturnInterceptor()
        {
            var proxy = (ReturnInterceptorTestClass)DynamicActivator.CreateInstance(typeof(ReturnInterceptorTestClass));

            /// Foo方法执行时对方法返回值进行拦截
            var result = proxy.Foo();

            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(ReturnInterceptorTestClass));
        }
        public void CreateInstanceOfArgs()
        {
            ///使用指定类型的默认构造函数来创建该类型的代理实例。
            var proxyRepository = DynamicActivator.CreateInstance(typeof(UserRepository));

            /// 使用与指定参数匹配程度最高的构造函数创建指定类型的代理实例。
            var proxyService = DynamicActivator.CreateInstance(typeof(UserService), new[] { proxyRepository });

            Assert.IsNotNull(proxyService);
            Assert.IsInstanceOfType(proxyService, typeof(UserService));
        }
Beispiel #7
0
        public void Complete(Type actualTravellerType)
        {
            var actualTravellerTypeInfo = actualTravellerType.GetTypeInfo();

            TravellerType     = actualTravellerType;
            Constructor       = actualTravellerTypeInfo.GetConstructor(_members.TravellerConstructorTypes);
            TravelWriteMethod = actualTravellerTypeInfo.GetMethod("Travel", TravelWriteMethod.GetParameters().Select(p => p.ParameterType).ToArray());
            TravelReadMethod  = actualTravellerTypeInfo.GetMethod("Travel", TravelReadMethod.GetParameters().Select(p => p.ParameterType).ToArray());
            _activator        = new DynamicActivator(Constructor);
            _isConstructing   = false;
        }
Beispiel #8
0
        public DynamicActivatorInstanceFactory(ConstructorInfo constructor, PropertyInfo[] properties, ITypeProvider provider, IEnumerable <IInstanceFactory> parameterFactories)
        {
            if (constructor == null)
            {
                throw new ArgumentNullException(nameof(constructor));
            }
            if (provider == null)
            {
                throw new ArgumentNullException(nameof(provider));
            }

            _activator = new DynamicActivator(constructor, provider);

            if (properties != null && properties.Length > 0)
            {
                var cons  = new IInstanceFactory[constructor.GetParameters().Length];
                var props = new IInstanceFactory[properties.Length];

                var ci = 0;
                var pi = 0;
                foreach (var factory in parameterFactories)
                {
                    if (ci < cons.Length)
                    {
                        cons[ci++] = factory;
                    }
                    else
                    {
                        props[pi++] = factory;
                    }
                }

                _conParamFactories  = cons;
                _propParamFactories = props;
                _propertySetter     = GetPropertySetter(properties, provider);
            }
            else
            {
                _conParamFactories = parameterFactories;
            }
        }