/// <summary>
 /// Creates a <see cref="IMessageProcessor"/>. Can be overridden in the derived classes to provide a different
 /// <see cref="IMessageProcessor"/> implementation. 
 /// </summary>
 /// <param name="atb">The <see cref="MessageHandlerAttribute"/> that was attached to the method that the
 /// <see cref="IMessageProcessor"/> is being created for.</param>
 /// <param name="handler">The <see cref="MessageProcessorHandler"/> for invoking the method.</param>
 /// <returns>The <see cref="IMessageProcessor"/> instance.</returns>
 protected virtual IMessageProcessor CreateMessageProcessor(MessageHandlerAttribute atb, MessageProcessorHandler handler)
 {
     return new MessageProcessor(atb.MsgID, handler);
 }
 /// <summary>
 /// Creates a <see cref="IMessageProcessor"/>. Can be overridden in the derived classes to provide a different
 /// <see cref="IMessageProcessor"/> implementation.
 /// </summary>
 /// <param name="atb">The <see cref="MessageHandlerAttribute"/> that was attached to the method that the
 /// <see cref="IMessageProcessor"/> is being created for.</param>
 /// <param name="handler">The <see cref="MessageProcessorHandler"/> for invoking the method.</param>
 /// <returns>The <see cref="IMessageProcessor"/> instance.</returns>
 protected virtual IMessageProcessor CreateMessageProcessor(MessageHandlerAttribute atb, MessageProcessorHandler handler)
 {
     return(new MessageProcessor(atb.MsgID, handler));
 }