Skip to content

Simple Modules

user/UserService.ts
export class UserService implements IUserService {
constructor(private userRepo: IUserRepository) {}
async createUser(name: string, email: string) { /* ... */ }
}
// todo/TodoService.ts
export class TodoService implements ITodoService {
constructor(
private todoRepo: ITodoRepository,
private userRepo: IUserRepository // Cross-module dependency!
) {}
async createTodo(title: string, userId: string) { /* ... */ }
}
{
"sourceDir": ".",
"outputPath": "container.gen.ts",
"modules": {
"UserModule": ["user/**/*"],
"TodoModule": ["todo/**/*"]
}
}
Terminal window
npx @notjustcoders/ioc-arise generate

container.gen.ts:

import { Container } from '@notjustcoders/di-container';
import type { ContainerRegistry } from './container.gen.d';
import { userModule } from './modules/userModule.module';
import { todoModule } from './modules/todoModule.module';
export const container = new Container<ContainerRegistry>();
container.registerModule(userModule);
container.registerModule(todoModule);

modules/todoModule.module.ts:

import { ContainerModule, Lifecycle } from '@notjustcoders/di-container';
import { TodoService } from '../todo/TodoService';
export const todoModule = new ContainerModule()
.register('ITodoService', {
useClass: TodoService,
dependencies: ['ITodoRepository', 'IUserRepository'], // Cross-module!
lifecycle: Lifecycle.Singleton
});
import { container } from './container.gen';
const userService = container.resolve('IUserService');
const todoService = container.resolve('ITodoService');
// ^? ITodoService - Full type safety across modules!