我正在使用 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 控制器开始的。