public IDisposable Subscribe <T, TMessage>( ISubscription subscription, IExchange exchange = null, IQueue queue = null, IEnumerable <IBinding> bindings = null) where T : ISubscriberHandler <TMessage> { using var channel = Connect().CreateModel(); exchange?.Declare(channel); queue?.Declare(channel); bindings?.Bind(channel); var consumer = new Consumer <TMessage>(Connect(), subscription, _provider); _consumers.Add(consumer); return(new UnSubscriber(() => { _consumers.Remove(consumer); consumer.Dispose(); })); }