Usage
Mark provider services
Use @FactoryProvider(factoryName, providerName) on any injectable service you want to resolve through the factory.
providers/csv.service.ts
import { Injectable } from '@nestjs/common';
import { FactoryProvider } from 'nestjs-factory-pattern-module';
@Injectable()
@FactoryProvider('EXPORT_SERVICE', 'csv')
export class CsvProviderService {
// ...
}
Inject the factory
The module exports an InjectFactory helper, which is an alias over @Inject(factoryName).
my.service.ts
import { Injectable } from '@nestjs/common';
import {
FactoryService,
InjectFactory,
} from 'nestjs-factory-pattern-module';
@Injectable()
export class MyService {
constructor(
@InjectFactory('EXPORT_SERVICE')
private readonly factory: FactoryService<any>,
) {}
async getProvider(type: string) {
return this.factory.getProviderServiceAsync(type);
}
}
Notes
- Provider discovery happens when
FactoryServiceis constructed. - If a provider is not found for a
type,getProviderServiceAsyncthrows.