Hello. Specially checked in. Maybe here will have the answer to your question.
I write software using a modular architecture. That is, I have the Core and plug-ins using the objects, events, and more that provides core. The core is divided into layers. One of the layers of "Data Access Layer", abbreviated DAL, which allows to access the database. The main task of this layer is to abstract from the data source, because I need to support both mysql and postgresql. For data access I chose to use the UnitOfWork pattern, as I need to manage transaction. An example of this pattern can be found for example here https://metanit.com/sharp/mvc5/23.3.php
In this example, only 2 entities (tables). I have 15 tables so my UnitOfWork has 15 properties.
Everything is fine - I'm not writing repetitive code, you can easily change the database.
As I said early I have a modular architecture. When the module is passed the Instance of the UnitOfWork class and , accordingly, the module can use all fields (repository tables) and access their properties.
Here's a problem. That is, if the module needs to create their own table or to use additional functionality, then he can't do it, because in the instance of UnitOfWork no properties and certain methods. How to do, so the Kernel does not adjust to the modules, and the modules were adjusted to the core. And it is the modules used kernel for comfortable work with the base.
To injecting separate "Tables" in the methods - not a good idea - in the same module can be used up to 12 tables.
How to make sure that everything is extensible and independently? In the world of php e.g. Laravel, many simply create instances of the model inside the controller - but this is fu.
By the way, if what I write under desktop.