/// <summary>
        ///   Method invoked when (instead of) a new handler is added to the target event.
        /// </summary>
        /// <param name="args">Context information.</param>
        public override void OnAddHandler(EventInterceptionArgs args)
        {
            // Add the handler to our own list.
            if (AddHandler(args.Handler))
            {
                args.AddHandler(null);
            }


            // Register the handler to the client to prevent garbage collection of the handler.
            DelegateReferenceKeeper.AddReference(args.Handler);
        }
        /// <summary>
        ///     Method invoked when (instead of) a new handler is added to the target event.
        /// </summary>
        /// <param name="args">Context information.</param>
        public override void OnAddHandler(EventInterceptionArgs args)
        {
            // Add the handler to our own list.
            if (AddHandler(args.Handler))
            {
                // If it is the first handler we are adding, add a fake handler to ourselves to the target event.
                // Whichever handler will add here will be passed to OnInvokeHandler, so it is safe and convenient to pass null.
                args.AddHandler(null);
            }


            // Register the handler to the client to prevent garbage collection of the handler.
            DelegateReferenceKeeper.AddReference(args.Handler);
        }