Getting started
@inversifyjs/prisma binds a Prisma 7 client into the InversifyJS container using a driver adapter, so your services can inject PrismaClient and talk to the database.
PostgreSQL is just an example
These guides use PostgreSQL with @prisma/adapter-pg, but @inversifyjs/prisma works with any Prisma 7 driver adapter. Swap the adapter, datasource provider, and connection options for your database of choice.
Install dependencies
Install @inversifyjs/prisma, inversify, Prisma, and the PostgreSQL driver adapter:
- npm
- yarn
- pnpm
npm install inversify @inversifyjs/prisma @prisma/client @prisma/adapter-pg pg
npm install -D prisma
yarn add inversify @inversifyjs/prisma @prisma/client @prisma/adapter-pg pg
yarn add -D prisma
pnpm add inversify @inversifyjs/prisma @prisma/client @prisma/adapter-pg pg
pnpm add -D prisma
Generate your Prisma client after configuring a PostgreSQL schema.prisma (and preferably a custom output outside node_modules).
Bind PrismaClient in the container
Load a PrismaContainerModule with @prisma/adapter-pg, then inject PrismaClient into services:
import { PrismaContainerModule } from '@inversifyjs/prisma';
import { PrismaPg } from '@prisma/adapter-pg';
import { Container, inject, injectable } from 'inversify';
import { PrismaClient, type User } from '../../generated/prisma/index.js';
@injectable()
export class UserService {
constructor(
@inject(PrismaClient)
private readonly prismaClient: PrismaClient,
) {}
public async createUser(
email: string,
name: string | null = null,
): Promise<User> {
return this.prismaClient.user.create({
data: {
email,
name,
},
});
}
}
export async function bootstrap(): Promise<UserService> {
const container: Container = new Container();
container.load(
new PrismaContainerModule({
adapter: {
build: (options: { connectionString: string }) => new PrismaPg(options),
},
options: {
value: {
connectionString: process.env['DATABASE_URL'] as string,
},
},
PrismaClient,
}),
);
container.bind(UserService).toSelf();
return container.get(UserService);
}