InversifyJS - внедрить сервис для экспресс-промежуточного программного обеспечения - PullRequest
0 голосов
/ 26 ноября 2018

Я использую inversify, inversify-binding-decorators и inversify-express-utlis, и у меня проблема с промежуточным программным обеспечением Express.

Я называю свое промежуточное программное обеспечение следующим образом:

let server = new InversifyExpressServer(container);
...
server.setConfig((app) => {

  app.use(validateSession);

});
...

Это мой класс для регистрации в ioc.Обратите внимание, что здесь я вручную регистрирую SessionContext в области действия запроса

import DatabaseApi  from './../repositories/databaseApi';
import { Container, inject } from "inversify";
import TYPES from "./types";
import { autoProvide, makeProvideDecorator, makeFluentProvideDecorator } from "inversify-binding-decorators";
import { SessionContext } from './../services/session/sessionContext';
let container = new Container();
container.bind<SessionContext>(TYPES.SessionContext).to(SessionContext).inRequestScope();
let provide = makeProvideDecorator(container);
let fluentProvider = makeFluentProvideDecorator(container);

let provideNamed = (identifier: any, name: any) => {
  return fluentProvider(identifier)
    .whenTargetNamed(name)
    .done();
};



export { container, autoProvide, provide, provideNamed, inject };

Теперь в своем промежуточном программном обеспечении я хочу получить свой SessionContext в службе области запроса следующим образом:

 export async function validateSession(req: Request, res: Response, next: NextFunction) {

  try {
    ...

    let sessionContext = container.get<SessionContext>(TYPES.SessionContext);

    ...
    return next();
  }
  catch (err) {
   next(err);
  }
}

Служба разрешенаНо проблема в том, что если я разрешу его в другом месте, я получу другой экземпляр.Объем запроса не работает, когда я использую сервис внутри промежуточного программного обеспечения.Всегда решать дает новый экземпляр здесь.Другими словами - я хочу начать с экспресс-промежуточного программного обеспечения.Что я чувствую, так это то, что область действия начинается позже с контроллера inversify-express-utils.

...