1. A method performed by a system of one or more computers, the method comprising: establishing a plurality of tenant containers for a plurality of tenants of a multi-tenant application implemented on a multi-tenant infrastructure based on a dependency injection framework, the multi-tenant infrastructure implemented in a plurality of libraries of executable software being grouped based on the dependency injection framework, each tenant container being a logical separation of data and functionality for a multi-tenant application, each tenant container being isolated from the other tenant containers; receiving a first request from a first client device; determining that the first request is associated with a first tenant container of the tenant containers; directing the first request to the first tenant container associated with the first request; in response to directing the first request to the first tenant container associated with the first request, executing, with a single thread, the multi-tenant application using the first tenant container and the first request; receiving a second request different from the first request from a second client device; determining that the second request is associated with a second tenant container of the tenant containers that is different than the first tenant container; directing the second request to the second tenant container associated with the second request; and in response to directing the second request to the second tenant container associated with the second request, executing, with the single thread executing the multi-tenant application for the first tenant container, the multi-tenant application using the second tenant container and the second request.