【发布时间】:2020-06-20 00:45:01
【问题描述】:
我在嵌套中有一个全局记录器模块,它记录到云记录服务。我正在尝试创建一个添加日志记录功能的类方法装饰器。但是我正在努力如何在装饰器中注入全局嵌套模块的服务,因为我在文档中找到的所有依赖注入机制都依赖于基于类或类属性的注入。
export function logDecorator() {
// I would like to inject a LoggerService that is a provider of a global logger module
let logger = ???
return (target: any, propertyKey: string, propertyDescriptor: PropertyDescriptor) => {
//get original method
const originalMethod = propertyDescriptor.value;
//redefine descriptor value within own function block
propertyDescriptor.value = function(...args: any[]) {
logger.log(`${propertyKey} method called with args.`);
//attach original method implementation
const result = originalMethod.apply(this, args);
//log result of method
logger.log(`${propertyKey} method return value`);
};
};
}
更新:根据要求提供一个简单示例 基本示例是使用我的自定义记录器(在我的情况下记录到云服务)记录对服务方法的调用:
class MyService {
@logDecorator()
someMethod(name: string) {
// calls to this method as well as method return values would be logged to CloudWatch
return `Hello ${name}`
}
}
另一个扩展用例是捕获一些错误,然后记录它们。我有很多这种逻辑可以在我的所有服务中重复使用。
【问题讨论】:
-
你能举个例子来说明你想如何使用这个装饰器吗?我想我知道你想要做什么,但不是 100% 确定。
-
@JayMcDoniel:当然,我用一个简单的例子更新了问题
标签: nestjs