在CustomDecorator
中,如何访问Nest.js中定义的服务示例?
export const CustomDecorator = (): MethodDecorator => {
return (
target: Object,
propertyKey: string | symbol,
descriptor: PropertyDescriptor
) => {
// Here, is possibile to access a Nest.js service (i.e. TestService) instance?
return descriptor;
}
};
字符串
5条答案
按热度按时间kxeu7u2r1#
迟到了,但因为我有一个类似的问题(在装饰器中使用全局嵌套模块),并偶然发现了这个问题。
字符串
agxfikkp2#
我们有几点:
decorated instance
创建之前执行的属性装饰器。some instance
,由decorated instance
的Injector解决。作为一种简单的方法-使用
decorated instance
注入的some instance
。字符串
PS我认为它是somehow可能使用示例的注入器,以获得任何所需的示例(如角)。
hpxqektj3#
我遇到了这个问题,花了一天的时间试图找出一个好的答案。这可能不适合每一个用例,但我能够复制Nest的核心包中的一个常见模式来满足我的需求。
我想创建自己的装饰器来注解控制器方法来处理事件(例如,
@Subscribe('some.topic.key') async handler() { ... })
)。为了实现这一点,我的装饰器使用
@nestjs/common
中的SetMetadata
来注册一些我需要的元数据(它所应用的方法名、它所属的类、对该方法的引用)。字符串
从那里,我可以创建自己的模块,它连接到Nest的生命周期钩子中,以找到我用装饰器装饰的所有方法,并对其应用一些逻辑,例如:
型
explorer服务使用
@nestjs/core
中的一些实用程序来内省容器,并处理查找所有带元数据的修饰函数的问题。型
我并不认为这是处理这个问题的最佳方法,但它对我来说效果很好。使用这段代码需要自担风险,它应该能让你开始:-)。我改编了这里的代码:https://github.com/nestjs/nest/blob/5.1.0-stable/packages/microservices/listener-metadata-explorer.ts
r7xajy2e4#
我从Buggy's answer和florian norbert bepunkt's answer中得到了灵感,我创建了一个装饰器,它只在装饰器中注入服务,如果它在目标中不可用。
字符串
mspsb9vt5#
我试图在ParamDecorator中使用我的配置服务,所以我通过创建一个新的示例来访问我的服务:
字符串