private DelegateDefinition CreateDelegateDefinition(object listener, ObjectInspectionHelper helper)
        {
            DelegateDefinition dd = new DelegateDefinition()
            {
                eventName = helper.subscribeAttribute.EventName, target = listener, filter = helper.subscribeAttribute.Filter
            };

            dd.delegateToFire = Delegate.CreateDelegate(typeof(EventArgumentDelegate), listener, helper.methodInfo);
            return(dd);
        }
        public void RegisterForEvent(object listener, string eventName)
        {
            if ((listener == null) || (string.IsNullOrEmpty(eventName)))
            {
                return;                                                          // Invalid arguments
            }
            if (IsRegisteredForEvent(listener, eventName))
            {
                return;                                            // already registered
            }
            ObjectInspectionHelper helper = ObjectInspector.GetMethodInfoForSubsribedEventEvent(listener, eventName);

            if (helper != null)
            {
                delegateDefinitions.Add(CreateDelegateDefinition(listener, helper));
            }
        }