Команда отправки MassTransit со свойством интерфейса - PullRequest
0 голосов
/ 31 мая 2018

Я использую MassTransit в своем проекте и пытаюсь отправить команду с внутренним свойством интерфейса.Я установил для свойства Document в команде ICreateDocumentCommand значение InventoryList .Отправляет без проблем.Но когда я получаю его, я получаю GreenPipes.DynamicInternal.Common.Models.IDocument на принимающей стороне.

И этот IDocument содержит только свойства типа Document, он не имеет свойств из класса InventoryList. В основном я передаю только Id, AuthorId и DateCreated без WarehouseId и всехостальные свойства из InventoryList.

Все мои классы действительно находятся внутри Common.Models, но я бы предпочел получить Common.Models.InventoryList вместо IDocument.

Вот так я отправляю команду:

await endPoint.Send<ICreateDocumentCommand>(new
{
    CorrelationId = //from outside
    SocketId = //from outside
    UserName = //from outside
    UserId = //from outside
    Document = //from outside (InventoryList)
});

Вот определение команды:

public interface ICommand
{
    Guid CorrelationId { get; set; }
    Guid SocketId { get; set; }
    string UserName { get; set; }
    Guid UserId { get; set; }
}

public class Command : ICommand
{        
    public Command() {}

    public Guid CorrelationId { get; set; }
    public Guid SocketId { get; set; } 
    public string UserName { get; set; }    
    public Guid UserId { get; set; }
}

public interface ICreateDocumentCommand : ICommand
{
    IDocument Document { get; set; }
}

public class  CreateDocumentCommand : Command, ICreateDocumentCommand
{
    public CreateDocumentCommand() {}

    public IDocument Document { get; set; }
}

Это была команда, теперь IDocument:

public interface IDocument
{
    Guid Id { get; set; }
    Guid AuthorId { get; set; }
    DateTime DateCreated { get; set; }
}

public class Document : IDocument
{
    public Document() {}

    public Guid Id { get; set; }
    public Guid AuthorId { get; set; }
    public DateTime DateCreated { get; set; } = DateTime.Now;
}

Наконец, список инвентаризации:

public class InventoryList : Document
{
    public InventoryList()  {}

    public Guid WarehouseId { get; set; }
    public string Copmany { get; set; }
    public Guid ResponsiblePersonId { get; set; }
    public Guid FirstCommissionMemberId { get; set; } 
    public Guid SecondCommissionMemberId { get; set; }
}
...