Skip to main content

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 FactoryService is constructed.
  • If a provider is not found for a type, getProviderServiceAsync throws.