Sharing single references with children without using a singleton pattern

I have a use case where a I have a parent ViewController A with two child view controllers B and C. C also has a child view controller D, E.

C in this case contains a map view that displays annotations and D, E have business logic that create annotations. I'm looking for a clean way to have annotations created by D and E display in the map view in C. Ideally i would avoid plumbing through the tree hierarchy via pullbacks as the number children in B will increase and that could get messy quickly. A simple approach would be to have A create an instance of an object, let's call it AnnotationsDataSource, that it can pass through to B, D, E.

D, E would write to the AnnotationsDataSource (Annotations stored as a CurrentValueSubject)
B would read the annotations within AnnotationsDataSource (via a Combine publisher) and update the map appropriately.

A and its descendants are created as locally scoped stores and configured (via the store.scope method). I'm noticing that this causes the Environment object to be recreated every time an action is sent to the store. The obvious solution to this problem is to create a singleton, but this causes potential issues as now we need to clear the state of the singleton when A is popped off the navigation stack.

Is there a way that A can create an instance of AppointmentDataSource to share with its descendants without having to make AppointmentDataSource a singleton?

I actually think pullback is the way to go. There are techniques you can use to make it less messy, like using a higher order reducer that "decorates" your reducer in those children with the logic to manage annotations. But in the end this is the approach native to the architecture.