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)); }
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)); }
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; }
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; } }