Я использую 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.