Вы можете использовать подход, подобный различным библиотекам трассировки и ведения журналов, где у вас есть классы источников данных, классы приемников данных и связать их вместе с третьим набором классов конфигурации / макета / рендерера.
Вреляционные термины, это позволило бы установить связь «многие ко многим».
Для этого работали бы потоковые читатели и писатели, но я считаю, что они предназначены для соединения 1-к-1.
Шаблон проектирования, который вы хотели бы изучить, - это Шаблон наблюдателя .В C # это реализовано с событиями.Возможно, это не самое быстрое решение в мире (из-за вызовов делегатов при каждом вызове источника), но оно, безусловно, будет наиболее гибким.Он также должен быть адаптирован к асинхронному сливу.