示例#1
0
        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);
        }
示例#2
0
        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];
        }
示例#4
0
        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);
        }
示例#5
0
        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));
        }
示例#7
0
 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);
 }