inversify的中间件只被调用一次
Middleware of inversify is called only once
我通过反转绑定对象如下:
container.applyMiddleware(loggerMiddleware);
let module = new ContainerModule((bind: interfaces.Bind) => {
bind<Logger>(TYPES.Logger).toConstantValue(logger);
bind<ILoggerFactory>(TYPES.ILoggerFactory).to(WinstonLoggerFactory);
bind<string>(TYPES.ConnectionString).toConstantValue(cs);
bind<{}>(TYPES.ConnectionOptions).toConstantValue({});
bind<ITradeController>(TYPES.ITradeController).to(TradeController);
bind<ITradeService>(TYPES.ITradeService).to(TradeService).whenInjectedInto(TradeController);
bind<ITradeRepository>(TYPES.ITradeRepository)
.to(TradeMongoRepository)
.whenInjectedInto(TradeService);
bind<IUserService>(TYPES.IUserService).to(UserService).whenInjectedInto(TradeService);
bind<IUserRepository>(TYPES.IUserRepository)
.to(UserMongoRepository)
.whenInjectedInto(UserService);
});
container.load(module);
我还声明了一个反转中间件如下:
import * as inversify from 'inversify';
function logger(next: inversify.interfaces.Next): inversify.interfaces.Next {
return (args: inversify.interfaces.NextArgs) => {
let start = new Date().getTime();
let result = next(args);
let end = new Date().getTime();
console.log(`wooooo ${end - start}`);
return result;
};
}
export default logger;
当应用程序 运行 时,只打印一条消息 'wooooo '。
例如,如果我按如下方式调用服务:
const tradeController = container.get<ITradeController>(TYPES.ITradeController);
const result = await tradeController.findByUserId(params.userId);
和 tradeController 调用 tradeService 然后 tradeService 调用 tradeRepository 等等我希望我看到每个级别的消息 'woooooo' 但它只打印一次。
怎么了?
inversify的中间件只被调用一次,其功能不同于AOP拦截器,这就是为什么它们只被调用一次的原因。
我通过反转绑定对象如下:
container.applyMiddleware(loggerMiddleware);
let module = new ContainerModule((bind: interfaces.Bind) => {
bind<Logger>(TYPES.Logger).toConstantValue(logger);
bind<ILoggerFactory>(TYPES.ILoggerFactory).to(WinstonLoggerFactory);
bind<string>(TYPES.ConnectionString).toConstantValue(cs);
bind<{}>(TYPES.ConnectionOptions).toConstantValue({});
bind<ITradeController>(TYPES.ITradeController).to(TradeController);
bind<ITradeService>(TYPES.ITradeService).to(TradeService).whenInjectedInto(TradeController);
bind<ITradeRepository>(TYPES.ITradeRepository)
.to(TradeMongoRepository)
.whenInjectedInto(TradeService);
bind<IUserService>(TYPES.IUserService).to(UserService).whenInjectedInto(TradeService);
bind<IUserRepository>(TYPES.IUserRepository)
.to(UserMongoRepository)
.whenInjectedInto(UserService);
});
container.load(module);
我还声明了一个反转中间件如下:
import * as inversify from 'inversify';
function logger(next: inversify.interfaces.Next): inversify.interfaces.Next {
return (args: inversify.interfaces.NextArgs) => {
let start = new Date().getTime();
let result = next(args);
let end = new Date().getTime();
console.log(`wooooo ${end - start}`);
return result;
};
}
export default logger;
当应用程序 运行 时,只打印一条消息 'wooooo '。
例如,如果我按如下方式调用服务:
const tradeController = container.get<ITradeController>(TYPES.ITradeController);
const result = await tradeController.findByUserId(params.userId);
和 tradeController 调用 tradeService 然后 tradeService 调用 tradeRepository 等等我希望我看到每个级别的消息 'woooooo' 但它只打印一次。
怎么了?
inversify的中间件只被调用一次,其功能不同于AOP拦截器,这就是为什么它们只被调用一次的原因。