protected AbstractLinkContainerOld createLinkContainer(Type registryType, Object[] arguments) { Object[] linkArguments; MethodInfo[] methods = ExtendableRegistry.GetAddRemoveMethods(registryType, arguments, out linkArguments); LinkContainerOld linkContainer = new LinkContainerOld(); linkContainer.AddMethod = methods[0]; linkContainer.RemoveMethod = methods[1]; linkContainer.Arguments = linkArguments; return(linkContainer); }
protected BeanConfiguration createLinkContainerConfiguration(Type registryType, Object[] arguments) { Object[] linkArguments; MethodInfo[] methods = ExtendableRegistry.GetAddRemoveMethods(registryType, arguments, out linkArguments); BeanConfiguration beanConfiguration = new BeanConfiguration(typeof(LinkContainerOld), null, ProxyFactory, Props); beanConfiguration.PropertyValue("AddMethod", methods[0]); beanConfiguration.PropertyValue("RemoveMethod", methods[1]); beanConfiguration.PropertyValue("Arguments", linkArguments); return(beanConfiguration); }
protected override void HandleLink(Object registry, Object listener, Object[] args) { Object[] linkArguments; MethodInfo[] methods = ExtendableRegistry.GetAddRemoveMethods(registry.GetType(), PropertyName, Arguments, out linkArguments); Arguments = linkArguments; args[0] = listener; methods[0].Invoke(registry, args); args[0] = null; // Clear reference (potential) garbage here removeMethod = methods[1]; }
protected AbstractLinkContainerOld createLinkContainer(Type registryType, String methodName) { Object[] linkArguments; MethodInfo[] methods = ExtendableRegistry.GetAddRemoveMethods(registryType, null, out linkArguments); LinkContainerOld linkContainer = new LinkContainerOld(); linkContainer.AddMethod = methods[0]; linkContainer.RemoveMethod = methods[1]; linkContainer.Arguments = linkArguments; if (methodName != null) { linkContainer.Listener = new LateDelegate(methods[0].GetParameters()[0].ParameterType, methodName); } return(linkContainer); }
protected BeanConfiguration createLinkContainerConfiguration(Type registryType, String methodName) { Object[] linkArguments; MethodInfo[] methods = ExtendableRegistry.GetAddRemoveMethods(registryType, null, out linkArguments); BeanConfiguration beanConfiguration = new BeanConfiguration(typeof(LinkContainerOld), null, ProxyFactory, Props); beanConfiguration.PropertyValue("AddMethod", methods[0]); beanConfiguration.PropertyValue("RemoveMethod", methods[1]); beanConfiguration.PropertyValue("Arguments", linkArguments); if (methodName != null) { beanConfiguration.PropertyValue("Listener", new LateDelegate(methods[0].GetParameters()[0].ParameterType, methodName)); } return(beanConfiguration); }
protected override Object resolveListenerIntern(Object listener) { listener = base.resolveListenerIntern(listener); if (MethodName == null) { return(listener); } // MethodInfo listenerMethod = listener.GetType().GetMethod(MethodName); Object[] linkArguments; MethodInfo[] methods = ExtendableRegistry.GetAddRemoveMethods(resolvedRegistry.GetType(), PropertyName, Arguments, out linkArguments); Arguments = linkArguments; // An autogenerated event "add" method has always exactly 1 argument ParameterInfo delegateParam = methods[0].GetParameters()[0]; return(Delegate.CreateDelegate(delegateParam.ParameterType, listener, MethodName)); }
protected override Object ResolveRegistryIntern(Object registry) { registry = base.ResolveRegistryIntern(registry); MethodInfo[] methods; Object[] linkArguments; if (RegistryPropertyName != null) { methods = ExtendableRegistry.GetAddRemoveMethods(registry.GetType(), RegistryPropertyName, Arguments, out linkArguments); } else { methods = ExtendableRegistry.GetAddRemoveMethods(RegistryBeanAutowiredType, Arguments, out linkArguments); } Arguments = linkArguments; addMethod = methods[0]; removeMethod = methods[1]; return(registry); }