0

J'essaie de faire une sorte de gestionnaire de sockets. Donc dans mon code angulaire 2 j'ai un service nommé "socket.service.ts".Chargement du service dynamique à l'intérieur du service angulaire 2

Ce service importe le socket io lib et crée le socket.

Mais j'essaie d'obtenir différents gestionnaires à partir d'un fichier json. Par exemple: L'utilisateur modifie la clé "handler" dans un fichier config.json et il doit changer le gestionnaire de la socket.

Je veux que ce gestionnaire ait une syntaxe de service angulaire 2. J'ai donc essayé d'importer ce service dynamique avec le

System.import(path).then() 

Mais cela me donne un faux.

Voici mon socket.service:

private _byHandler() { 
    var _this = this; 

    this._initHandler((socketHandler) => { 
    _this.config = socketHandler.getConfig(_this.config); 
    _this._handler = socketHandler; 
    _this._createSocket(); 
    }); 
} 

private _initHandler(callback) { 
    let _this = this, 
     handler = this.config.handler, 
     path = "./../handlers/socket/" + handler + "/" + handler + "handler"; 

    System.import(path).then(callback); 
} 

Merci!

Répondre

0

Ok, je trouve la solution: D'abord ma variable de chemin n'était pas bonne et nous devrions savoir que la valeur retournée par System.import n'est pas la classe elle-même mais un objet qui contient la classe.

Ainsi, dans le .alors() devrait faire quelque chose comme:

let handlerClass = null; 
    for(let k in socketHandler) { 
    handlerClass = k; //Get the first key of the object cause we don't know the class name 
    break; 
    } 

    _this._handler = new socketHandler[handlerClass]();