public static function factory(
        ApplicationServerInterface $applicationServer,
        ContainerConfigurationInterface $configuration,
        $runlevel = ApplicationServerInterface::NETWORK
    ) {

        // create a new reflection class instance
        $reflectionClass = new \ReflectionClass($configuration->getType());

        // initialize the container configuration with the base directory and pass it to the thread
        $params = array($applicationServer->getInitialContext(), $applicationServer->getNamingDirectory(), $configuration, $applicationServer->runlevelToString($runlevel));

        // create, initialize and return the container instance
        return $reflectionClass->newInstanceArgs($params);
    }