Skip to content

Commit 311b081

Browse files
Merge branch 'docs/discovery-service' of github.com:vahidvdn/docs.nestjs.com into vahidvdn-docs/discovery-service
2 parents 3b47a32 + 16f3212 commit 311b081

File tree

1 file changed

+9
-25
lines changed

1 file changed

+9
-25
lines changed

content/fundamentals/discovery-service.md

+9-25
Original file line numberDiff line numberDiff line change
@@ -59,37 +59,22 @@ console.log(controllers);
5959

6060
#### Finding Metadata
6161

62-
`DiscoveryService` can help find metadata attached to providers or controllers. This is useful when working with decorators that add metadata.
62+
`DiscoveryService` can help find metadata attached to providers or controllers. This is useful when working with decorators that add metadata. Let's see an example. Suppose you have a custom decorator that adds metadata to a provider:
6363

6464
```typescript
65-
const providers = this.discoveryService.getProviders();
66-
67-
for (const provider of providers) {
68-
const metadata = this.reflector.get('custom:metadataKey', provider.instance.constructor);
69-
if (metadata) {
70-
console.log(`Metadata found:`, metadata);
71-
}
72-
}
73-
```
74-
75-
##### Example: Custom Decorator with DiscoveryService
76-
77-
Suppose you have a custom decorator that adds metadata to a provider:
78-
79-
```typescript
80-
import { SetMetadata } from '@nestjs/common';
65+
import { DiscoveryService } from '@nestjs/core';
8166

82-
export const CustomMetadata = (value: string) => SetMetadata('custom:metadataKey', value);
67+
export const Pets = DiscoveryService.createDecorator();
8368
```
8469

8570
And you use it in a service:
8671

8772
```typescript
8873
import { Injectable } from '@nestjs/common';
89-
import { CustomMetadata } from './custom-metadata.decorator';
74+
import { Pets } from './custom-metadata.decorator';
9075

9176
@Injectable()
92-
@CustomMetadata('example-value')
77+
@Pets('cats')
9378
export class CustomService {}
9479
```
9580

@@ -98,12 +83,11 @@ Now, you can use `DiscoveryService` to find all providers with this metadata:
9883
```typescript
9984
const providers = this.discoveryService.getProviders();
10085

101-
const filteredProviders = providers.filter((provider) => {
102-
if (!provider.instance) return null;
103-
return !!this.reflector.get(metadataPathToken, provider.instance.constructor);
104-
});
86+
const [provider] = providers.filter(
87+
(prov) => this.discoveryService.getMetadataByDecorator(Pets, prov) === 'cats',
88+
);
10589

106-
console.log('Providers with custom metadata:', filteredProviders);
90+
console.log('Providers with cats metadata:', provider);
10791
```
10892

10993
### Conclusion

0 commit comments

Comments
 (0)