Chained/Cloned containers #70
Replies: 4 comments 10 replies
-
I also like this for advanced features, like reloading settings by clearing/reloading values in the App-bound container. |
Beta Was this translation helpful? Give feedback.
-
I’ve been thinking about this quite a bit and if I read you correctly, the best, yet nontrivial move, would be to move away from registries as a first-class concept to containers all the way? IOW the moment svcs is initialized, it creates its first root container that is then passed into the app/web integrations. This container could carry system-wide dependencies like configs or engines (fixing #34) and each request would create a child container with the lifetime of the request. The full cache of a container could be a ChainMap of all parents’s caches and if the service is missing, it’s added to the local one. When a parent container is closed, it also closes all of its child containers. Child containers therefore need to know both about their parents for cache lookups and their children for cleanups. I think, it would also make testing easier, since you can clone the real container and overwrite just the factory you want to change. No need to flush upstream caches. Open questions
I think this whole proposal is basically what @elfjes has been asking for from day 1? /o\ |
Beta Was this translation helpful? Give feedback.
-
I have an example but I don't know if that comment was more like "please, PLEASE, no concrete examples." 😀 |
Beta Was this translation helpful? Give feedback.
-
I have a system built around rendering components and subcomponents. I want a root registry for all the system registrations, then a per-request registry, as described here. A view renders a component and for a while I wanted per-component registrations. Not having it was a little painful. Of course components have subcomponents. These component/subcomponent registries would be really lightweight. They would hold very little and get most of their registrations and data from the root and request registries. They would override very little, but the "little" they override would be important. |
Beta Was this translation helpful? Give feedback.
-
Per fedi, https://tacobelllabs.net/@astraluma/111904242641573392
I think it would be useful to have chained/cloned/inherited containers: basically, being able to have a container access the instances of another container without taking over it's cleanup.
This would allow more flexibility in using svcs in a way that reflects the lifecycle structure of the application. By which I mean, many applications have several lifecycles/scopes, and it would be good to have more options for integrating DI/IoC into that.
Basically, more scopes more good?
These could also replace singleton factories or registry-based value, since instead you could have a global root container, and could be a way to handle #26.
Beta Was this translation helpful? Give feedback.
All reactions