Ash Framework (PragProg)

It doesn’t touch on multitenancy, but all concepts still apply, except you provide a tenant to all the functions.