The requirement was to split the code into assemblies and maintain loose coupling.
Sigiloso
I separated the code into distinct assemblies and used an event bus with application-wide signals defined only in the core assembly to enable communication between modules while maintaining loose coupling.