InversifyJS впрыскивая express.Application - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь внедрить InversifyJS в одном из моих проектов Express, все отлично работает, кроме веб-сокетов.WebsocketServer требует встроенного экземпляра сервера, и я храню соединения в экспресс-объекте, например:

const port = 3000;
await container.loadAsync(bindings);
const app = new InversifyExpressServer(container);
const WebSocketServer = require('ws').Server;
const server = app.build();

server.listen(port, () => {
    console.log(`Server running at http://127.0.0.1:${port}/`)
});

const wss = new WebSocketServer({server: server, path: "/hereIsWS"});
wss.on("connection", function(ws){
    let id = Math.random();
    CLIENTS[id] = ws;

    ws.on('close', function() {
        delete CLIENTS[id];
        server.set("clients", CLIENTS);
    });
    // console.log("app", app);
    server.set("clients", CLIENTS);
});

Теперь у меня есть WebsocketService, где я управляю сообщениями, я использовал его для построения с параметром private app: express.Application в конструкторе и подключенных клиентах есть, но я не могу ввести объект, используя inversify.Кто-нибудь знает, как ввести это с помощью Inversify?.

1 Ответ

0 голосов
/ 23 декабря 2018

В соответствии с кодом выше.Вам нужно извлечь объект из локатора объектов - контейнера.В событиях сокетов у вас есть доступ к родительским замыканиям, где определен контейнер.Итак, извлекаем любой контейнер, который вам нужен, обычным способом

const ninja = myContainer.get<Warrior>(TYPES.Warrior);

@ inject - это помощник, который извлекает службу и связывает ее со свойством класса (две операции)завернутый декоратором @ injectable .Вам это здесь не нужно.

...