diff --git a/README.md b/README.md index bc6b2d3..c46bf8f 100644 --- a/README.md +++ b/README.md @@ -407,6 +407,17 @@ export class PhotoService { } ``` +You can use the `@InjectMikroORMs` decorator to get all registered MikroORM instances: + +```typescript +@Injectable() +export class MyService { + + constructor(@InjectMikroORMs() private readonly orms: MikroORM[]) { } + +} +``` + ## Testing The `nestjs-mikro-orm` package exposes `getRepositoryToken()` function that returns prepared token based on a given entity to allow mocking the repository. diff --git a/src/mikro-orm.common.ts b/src/mikro-orm.common.ts index 3aae756..111bd0e 100644 --- a/src/mikro-orm.common.ts +++ b/src/mikro-orm.common.ts @@ -20,6 +20,13 @@ export const getMikroORMToken = (name: string) => `${name}_MikroORM`; */ export const InjectMikroORM = (name: string) => Inject(getMikroORMToken(name)); +/** + * Injects the MikroORMs provider. + * + * @returns A decorator which will cause NestJS to inject the MikroORMs provider. + */ +export const InjectMikroORMs = () => Inject('MikroORMs'); + /** * Gets the injection token based on context name for the relevant EntityManager provider. * @param name The context name of the database connection. diff --git a/src/multiple-mikro-orm.middleware.ts b/src/multiple-mikro-orm.middleware.ts index 75f8e59..0d7267f 100644 --- a/src/multiple-mikro-orm.middleware.ts +++ b/src/multiple-mikro-orm.middleware.ts @@ -1,10 +1,11 @@ import { RequestContext, type MikroORM } from '@mikro-orm/core'; -import { Inject, Injectable, type NestMiddleware } from '@nestjs/common'; +import { Injectable, type NestMiddleware } from '@nestjs/common'; +import { InjectMikroORMs } from './mikro-orm.common'; @Injectable() export class MultipleMikroOrmMiddleware implements NestMiddleware { - constructor(@Inject('MikroORMs') private readonly orm: MikroORM[]) {} + constructor(@InjectMikroORMs() private readonly orm: MikroORM[]) {} use(req: unknown, res: unknown, next: (...args: any[]) => void) { RequestContext.create(this.orm.map(orm => orm.em), next);