Modular Monolith in .NET: Enforcing Boundaries with Dependency Inversion

I have been writing .NET for the better part of two decades now, across dozens of projects. Different domains, different teams, different decades — and yet there is one thing I can almost always count on finding when I open a solution: a project called Core. Or Kernel. Or Shared,...