MassTrant - время жизни DI потребителя и варианты регистрации - PullRequest
0 голосов
/ 26 января 2019

Я знаю, что рекомендуется, чтобы экземпляры, которые реализуют IConsumer<T>, были зарегистрированы как экземпляры Scoped.

public class OrderCompleteEventHandler : IConsumer<IOrderCompleteEvent>
{
    private readonly IOrderService _orderService;

    public OrderCompleteEventHandler(IOrderService orderService)
    { 
        _orderService = orderService;
    }

    public Task Consume(ConsumeContext<IOrderCompleteEvent> context) => _orderService.DoSomething();
}

В вышеприведенном примере это означает, что OrderCompleteEventHandler удаляется после каждого потребляемого сообщения, который вводит зависимую зависимость для всех внедряемых сервисов?

Какие еще варианты у нас есть при регистрации времени жизни потребителей и их внедряемых сервисов?

1 Ответ

0 голосов
/ 26 января 2019

Потребители инкапсулированы в объем жизненного цикла для каждого сообщения. Это сделано для того, чтобы сообщения могли использоваться с большим параллелизмом. Если нагрузка достаточно велика. MassTransit будет использовать несколько пользовательских экземпляров, поэтому общая пропускная способность увеличивается.

Я не уверен, какое это имеет отношение к зависимостям. В статье Марка четко описывается, что синглтоны, которые принимают зависимости, зарегистрированные с переходной областью действия, фактически станут синглетонами. Поскольку потребители по определению не являются одиночками, они физически не могут создавать зависимостей в неволе.

У потребителей могут быть другие зависимости, которые могут быть как временными, так и будут создаваться для каждого сообщения, или для области, или для одиночного сообщения.

...