示例#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);
 }
示例#8
0
        public static IServiceContext CreateBootstrap(IProperties properties, Type[] bootstrapModules, params Object[] bootstrapModuleInstances)
        {
            if (properties == null)
            {
                properties = Properties.Application;
            }
            // create own sub-instance of properties
            Properties newProps = new Properties(properties);

            ThreadLocalCleanupController threadLocalCleanupController = new ThreadLocalCleanupController();

            ConversionHelper           conversionHelper           = new ConversionHelper();
            DelegatingConversionHelper delegatingConversionHelper = new DelegatingConversionHelper();
            LinkController             linkController             = new LinkController();
            LoggerHistory             loggerHistory             = new LoggerHistory();
            AccessorTypeProvider      accessorTypeProvider      = new AccessorTypeProvider();
            ExtendableRegistry        extendableRegistry        = new ExtendableRegistry();
            GarbageProxyFactory       garbageProxyFactory       = new GarbageProxyFactory();
            PropertyInfoProvider      propertyInfoProvider      = new PropertyInfoProvider();
            BeanContextInitializer    beanContextInitializer    = new BeanContextInitializer();
            CallingProxyPostProcessor callingProxyPostProcessor = new CallingProxyPostProcessor();
            ProxyFactory         proxyFactory    = new ProxyFactory();
            DelegateFactory      delegateFactory = new DelegateFactory();
            AutoLinkPreProcessor threadLocalCleanupPreProcessor = new AutoLinkPreProcessor();

            callingProxyPostProcessor.PropertyInfoProvider     = propertyInfoProvider;
            delegatingConversionHelper.DefaultConversionHelper = conversionHelper;
            linkController.ExtendableRegistry = extendableRegistry;
            linkController.Props        = newProps;
            linkController.ProxyFactory = proxyFactory;
            beanContextInitializer.CallingProxyPostProcessor = callingProxyPostProcessor;
            beanContextInitializer.ConversionHelper          = delegatingConversionHelper;
            beanContextInitializer.PropertyInfoProvider      = propertyInfoProvider;
            garbageProxyFactory.AccessorTypeProvider         = accessorTypeProvider;
            propertyInfoProvider.AccessorTypeProvider        = accessorTypeProvider;
            threadLocalCleanupPreProcessor.SetExtendableRegistry(extendableRegistry);
            threadLocalCleanupPreProcessor.SetExtendableType(typeof(IThreadLocalCleanupBeanExtendable));

            LoggerInstancePreProcessor loggerInstancePreProcessor = new LoggerInstancePreProcessor();

            propertyInfoProvider.AfterPropertiesSet();

            ScanForLogInstance(loggerInstancePreProcessor, propertyInfoProvider, newProps, accessorTypeProvider);
            ScanForLogInstance(loggerInstancePreProcessor, propertyInfoProvider, newProps, callingProxyPostProcessor);
            ScanForLogInstance(loggerInstancePreProcessor, propertyInfoProvider, newProps, delegatingConversionHelper);
            ScanForLogInstance(loggerInstancePreProcessor, propertyInfoProvider, newProps, extendableRegistry);
            ScanForLogInstance(loggerInstancePreProcessor, propertyInfoProvider, newProps, linkController);
            ScanForLogInstance(loggerInstancePreProcessor, propertyInfoProvider, newProps, loggerHistory);
            ScanForLogInstance(loggerInstancePreProcessor, propertyInfoProvider, newProps, beanContextInitializer);
            ScanForLogInstance(loggerInstancePreProcessor, propertyInfoProvider, newProps, propertyInfoProvider);
            ScanForLogInstance(loggerInstancePreProcessor, propertyInfoProvider, newProps, threadLocalCleanupController);
            ScanForLogInstance(loggerInstancePreProcessor, propertyInfoProvider, newProps, threadLocalCleanupPreProcessor);

            accessorTypeProvider.AfterPropertiesSet();
            callingProxyPostProcessor.AfterPropertiesSet();
            delegatingConversionHelper.AfterPropertiesSet();
            extendableRegistry.AfterPropertiesSet();
            linkController.AfterPropertiesSet();
            loggerHistory.AfterPropertiesSet();
            beanContextInitializer.AfterPropertiesSet();
            threadLocalCleanupController.AfterPropertiesSet();
            threadLocalCleanupPreProcessor.AfterPropertiesSet();

            PropertiesPreProcessor propertiesPreProcessor = new PropertiesPreProcessor();

            propertiesPreProcessor.ConversionHelper     = delegatingConversionHelper;
            propertiesPreProcessor.PropertyInfoProvider = propertyInfoProvider;
            propertiesPreProcessor.AfterPropertiesSet();

            // The DelegatingConversionHelper is functional, but has yet no properties set
            propertiesPreProcessor.PreProcessProperties(null, null, newProps, "delegatingConversionHelper", delegatingConversionHelper, typeof(DelegatingConversionHelper), null, EmptySet.Empty <String>(), null);
            delegatingConversionHelper.AfterPropertiesSet();

            BeanContextFactory parentContextFactory = new BeanContextFactory(linkController, beanContextInitializer, proxyFactory, null, newProps, null);

            parentContextFactory.RegisterWithLifecycle(loggerHistory).Autowireable <ILoggerHistory>();
            parentContextFactory.RegisterWithLifecycle(proxyFactory).Autowireable <IProxyFactory>();
            parentContextFactory.RegisterWithLifecycle(threadLocalCleanupController).Autowireable(typeof(IThreadLocalCleanupController),
                                                                                                  typeof(IThreadLocalCleanupBeanExtendable));

            parentContextFactory.RegisterExternalBean(delegatingConversionHelper).Autowireable(typeof(IConversionHelper), typeof(IDedicatedConverterExtendable));

            parentContextFactory.RegisterWithLifecycle(accessorTypeProvider).Autowireable <IAccessorTypeProvider>();

            parentContextFactory.RegisterExternalBean(loggerInstancePreProcessor).Autowireable <ILoggerCache>();

            parentContextFactory.RegisterWithLifecycle(extendableRegistry).Autowireable <IExtendableRegistry>();

            parentContextFactory.RegisterWithLifecycle(garbageProxyFactory).Autowireable <IGarbageProxyFactory>();

            parentContextFactory.RegisterWithLifecycle(callingProxyPostProcessor).Autowireable <CallingProxyPostProcessor>();

            parentContextFactory.RegisterWithLifecycle(propertyInfoProvider).Autowireable <IPropertyInfoProvider>();

            parentContextFactory.RegisterWithLifecycle(delegateFactory).Autowireable <IDelegateFactory>();

            if (bootstrapModules != null)
            {
                for (int a = 0, size = bootstrapModules.Length; a < size; a++)
                {
                    parentContextFactory.RegisterBean(bootstrapModules[a]);
                }
            }
            if (bootstrapModuleInstances != null)
            {
                for (int a = 0, size = bootstrapModuleInstances.Length; a < size; a++)
                {
                    parentContextFactory.RegisterExternalBean(bootstrapModuleInstances[a]);
                }
            }
            List <IBeanPreProcessor> preProcessors = new List <IBeanPreProcessor>();

            preProcessors.Add(propertiesPreProcessor);
            preProcessors.Add(loggerInstancePreProcessor);
            preProcessors.Add(threadLocalCleanupPreProcessor);
            return(parentContextFactory.Create("bootstrap", null, preProcessors, null));
        }