Simple Modules
Step 1: Write Your Code
Section titled “Step 1: Write Your Code”export class UserService implements IUserService { constructor(private userRepo: IUserRepository) {} async createUser(name: string, email: string) { /* ... */ }}
// todo/TodoService.tsexport class TodoService implements ITodoService { constructor( private todoRepo: ITodoRepository, private userRepo: IUserRepository // Cross-module dependency! ) {} async createTodo(title: string, userId: string) { /* ... */ }}Step 2: Configure Modules
Section titled “Step 2: Configure Modules”{ "sourceDir": ".", "outputPath": "container.gen.ts", "modules": { "UserModule": ["user/**/*"], "TodoModule": ["todo/**/*"] }}Step 3: Generate Container
Section titled “Step 3: Generate Container”npx @notjustcoders/ioc-arise generateStep 4: Generated Code
Section titled “Step 4: Generated Code”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 });Step 5: Use It
Section titled “Step 5: Use It”import { container } from './container.gen';
const userService = container.resolve('IUserService');const todoService = container.resolve('ITodoService');// ^? ITodoService - Full type safety across modules!