Inheritance: Tp.Integration.Common.DataTransferObject
		public void Execute(MessageDTO dto, AttachmentDTO[] attachments, int[] requesters)
		{
			foreach (var thenClause in _clauses)
			{
				thenClause.Execute(dto, attachments, requesters);
			}
		}
		public EmailProcessingSagaContext()
		{
			ObjectFactory.Configure(x => x.For<EmailProcessingSagaContext>().Use(this));

			_emailMessage = new EmailMessage
			{
				FromDisplayName = "John Smith",
				SendDate = DateTime.Now.AddDays(-1),
				MessageUidDto = new MessageUidDTO {UID = new Random().Next().ToString()}
			};

			_createdMessageDtos = new List<MessageDTO>();

			Transport.On<CreateCommand>(x => x.Dto is RequesterDTO)
				.Reply(x =>
				       {
				       	var emailToCreate = ((RequesterDTO) x.Dto).Email;
				       	if (_createdRequesterEmail == emailToCreate)
				       	{
				       		return new EmptyMessage();
				       	}

				       	_createdRequesterEmail = emailToCreate;
				       	return new RequesterCreatedMessage
				       	{
				       		Dto = new RequesterDTO
				       		{
				       			Email = ((RequesterDTO) x.Dto).Email,
				       			ID = CREATED_REQUESTER_DTO_ID
				       		}
				       	};
				       });

			Transport.On<CreateMessageCommand>()
				.Reply(x =>
				       {
				       	var message = new MessageDTO
				       	{
				       		Subject = x.Dto.Subject,
				       		FromID = x.Dto.FromID,
				       		Body = x.Dto.Body,
				       		ID = CREATED_MESSAGE_DTO_ID
				       	};
				       	_createdMessageDtos.Add(message);
				       	return new MessageCreatedMessage {Dto = message};
				       });

			Transport.On<CreateCommand>(x => x.Dto is CommentDTO).Reply(x => GetCommentCreatedMessage(x));

			Transport.On<CreateCommand>(x => x.Dto is AttachmentDTO)
				.Reply(message => new AttachmentCreatedMessage
				{
					Dto =
						new AttachmentDTO {ID = 11, OriginalFileName = ((AttachmentDTO) message.Dto).OriginalFileName}
				});

			GetCommentCreatedMessage = GetCommentCreateCommandSuccessfulMessage;
		}
		public override void Execute(MessageDTO dto, AttachmentDTO[] attachments)
		{
			var command = new CreateRequestFromMessageCommand { MessageDto = dto, ProjectId = _projectId, Attachments = attachments, IsPrivate = false };
			_bus.SendLocal(command);
		}
		public override void Execute(MessageDTO dto, AttachmentDTO[] attachments, int[] requesters)
		{
			var command = new CreateRequestFromMessageCommand { MessageDto = dto, ProjectId = _projectId, Attachments = attachments, Requesters = requesters, IsPrivate = _isPrivate, SquadId = _squadId };
			_bus.SendLocal(command);
		}
		public abstract void Execute(MessageDTO dto, AttachmentDTO[] attachments);
		public bool IsMessageForCurrentEmailAccount(MessageDTO messageDto)
		{
			return messageDto.MessageUidDto != null && messageDto.MessageUidDto.MailServer == MailServer &&
			       messageDto.MessageUidDto.MailLogin == Login;
		}
		public abstract void Execute(MessageDTO dto, AttachmentDTO[] attachments, int[] requesters);
		public override void Execute(MessageDTO dto, AttachmentDTO[] attachments, int[] requesters)
		{
			_bus.SendLocal(new AttachMessageToProjectCommand {MessageDto = dto, ProjectId = _projectId});
		}
		public void Execute(MessageDTO dto, AttachmentDTO[] attachments)
		{
			_thenClause.Execute(dto, attachments);
		}
 public void CreateMessage(int messageId, string subject)
 {
     _message = new MessageDTO {MessageID = messageId, Subject = subject};
 }
		public void Execute(MessageDTO dto, AttachmentDTO[] attachments, int[] requesters)
		{
			_thenClause.Execute(dto, attachments, requesters);
		}