public static IObservable <IConnection <Message> > OnConnect <TChannel>( this IChannelListener <TChannel> listener) where TChannel : class, IOutputChannel, IInputChannel { return(listener .GetChannels() .Select(channel => { var inputs = channel.GetMessages(); var outputs = channel.GetConsumer(); return channel.CreateIoChannel(inputs, outputs); })); }