¿Cómo se incluyen o se cargan automáticamente las bibliotecas externas en una extensión de TYPO3 Extbase? + Inyección de dependencia?

Estoy desarrollando una extensión TYPO3 4.6 con Extbase 1.4 y estoy intentando incluir una biblioteca externa. La biblioteca, en mi caso lafacebook PHP SDK, está debajo$_EXTKEY/Resources/PHP/facebook-php-sdk/facebook.php. Me gustaría que la biblioteca se cargue automáticamente y se inyecte automáticamente (Dependecy Injection) donde la necesite.

Algunos comentarios que encontré en línea sugieren que uno debería incluir bibliotecas con require_once ():

http://forge.typo3.org/issues/33142

si es solo una pequeña biblioteca auxiliar, se debe almacenar en {PackageRoot} / Resources / PHP / {libraryName} y solo se incluye a través de require. ¿Es esto sospechado por el problema sin embargo?si el paquete FLOW3 representa principalmente la biblioteca extranjera, como es el caso en el paquete Imagine o Swift, el código de la biblioteca se coloca debajo de {PackageRoot} / Classes directamente ".

http://lists.typo3.org/pipermail/typo3-project-typo3v4mvc/2011-July/009946.html

"Incluiría la clase (utilizando require_once) desde una acción específica para manejar esto. De esa manera, tendrá acceso a esas funciones y la clase se convertirá en su biblioteca".

Intenté esto y funciona así:

<?php
require_once( t3lib_extMgm::extPath('extkey') . 'Resources/PHP/facebook-php-sdk/facebook.php');

class Tx_WsLogin_Domain_Repository_FacebookUserRepository extends Tx_WsLogin_Domain_Repository_UserRepository {

protected $facebook;

public function __construct() {
    $this->setFacebook(new Facebook(array(
        'appId' =>'',
        'secret' => '')
    ));
    parent::__construct();
}

public function setFacebook(Facebook $facebook) {
    $this->facebook = $facebook;
}


public function sampleFunction() {
    $userId = $this->facebook->getUser();
}

}
?>

Pero, ¿cómo puedo hacer que se cargue automáticamente e inyectar automáticamente la biblioteca con la función injectFacebook?

editar:

Me gusta@alex_schnitzler y@sorenmalling mencionado sobre la carga automática:

@PeterTheOne Coloque todos los archivos dentro de ext_autoload.php y luego use DI o el administrador de objetos.

@PeterTheOne puso la definición de la clase en ext_autoload.php en su extensión?

Lo intenté así (archivo: ext_autoload.php):

<?php

$extPath = t3lib_extMgm::extPath('extKey');

return array(
    'facebook' => $extPath . 'Resources/PHP/facebook-php-sdk/facebook.php',
);

?>

Parece encontrar e incluir el archivo correcto. Pero cuando intento usar la inyección de dependencia (comoPedro respondió) Me sale un error:

no se pasó una matriz de información correcta de dependencias de constructor!

InvalidArgumentException lanzado en el archivo /var/syscp/webs/web1/dev/typo3_src-4.5.15/typo3/sysext/extbase/Classes/Object/Container/Container.php en la línea 247.

Creo que esto se debe a que el constructor de la clase de Facebook tiene un argumento $ config requerido.

edit2:

Hice lo que Peter dijo en su respuesta y con la ayuda de@alex_schnitzler y@sorenmalling, quien me señaló el ObjectManager, mi servicio de Facebook se ve así ahora:

class Tx_Extkey_Service_FacebookService implements t3lib_Singleton {

/**
* @var Tx_Extbase_Object_ObjectManagerInterface
*/
protected $objectManager;

/**
 * Facebook from @link https://github.com/facebook/facebook-php-sdk facebook-php-sdk
 *
 * @var Facebook
 */
protected $facebook;

/**
* @param Tx_Extbase_Object_ObjectManagerInterface $objectManager
*/
public function injectObjectManager(Tx_Extbase_Object_ObjectManagerInterface $objectManager) {
    $this->objectManager = $objectManager;
}

/**
 * 
 */
public function initializeObject() {
    $this->facebook = $this->objectManager->create(
        'Facebook',
        array(
            'appId' =>'input appId here',
            'secret' => 'input app secret here'
        )
    );
}

/**
 * @return Facebook
 */
public function getFacebook() {
    return $this->facebook;
}

}

Para más ayuda lea:http://forge.typo3.org/projects/typo3v4-mvc/wiki/Dependency_Injection_(DI) las partes sobreinitializeObject () yCreación de objetos prototipo a través del Administrador de objetos

Respuestas a la pregunta(2)

Su respuesta a la pregunta