Skip to main content

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 install inversify @inversifyjs/prisma @prisma/client @prisma/adapter-pg pg
npm install -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);
}