public sealed class DataMuncher {
public DataMuncher(
IEnumerable<IDataProvider> dataProviders,
IEnumerable<IDataConsumer> dataConsumers
) {
var consumersAndData = dataConsumers
.Select(consumer => new { consumer, dataspec = consumer.GetDesiredDataSpecification() })
.Select(cas => new {
cas.consumer,
cas.dataspec,
data = dataProviders
.Select(provider => provider.RetrieveData(cas.dataspec))
})
.ToList();
consumersAndData.ForEach(cas => cas.consumer.ReceiveData(cas.data));
}
}