Minimal Todo Example
Step 1: Write Your Code
Section titled “Step 1: Write Your Code”export interface ITodoRepository { create(todo: Todo): Promise<Todo>; findById(id: string): Promise<Todo | undefined>; findAll(): Promise<Todo[]>;}
// repositories/InMemoryTodoRepository.tsexport class InMemoryTodoRepository implements ITodoRepository { private todos: Todo[] = []; async create(todo: Todo) { /* ... */ } async findById(id: string) { /* ... */ } async findAll() { /* ... */ }}
// services/ITodoService.tsexport interface ITodoService { createTodo(data: CreateTodoData): Promise<Todo>; getAllTodos(): Promise<Todo[]>; getTodoById(id: string): Promise<Todo | undefined>;}
// services/TodoService.tsexport class TodoService implements ITodoService { constructor(private todoRepository: ITodoRepository) {} async createTodo(data: CreateTodoData) { /* ... */ } async getAllTodos() { /* ... */ } async getTodoById(id: string) { /* ... */ }}Step 2: Generate Container
Section titled “Step 2: Generate Container”npx @notjustcoders/ioc-arise generateStep 3: Generated Code
Section titled “Step 3: Generated Code”container.gen.d.ts:
export interface ContainerRegistry { 'ITodoService': ITodoService; 'ITodoRepository': ITodoRepository;}container.gen.ts:
import { Container, Lifecycle } from '@notjustcoders/di-container';import type { ContainerRegistry } from './container.gen.d';import { TodoService } from './services/TodoService';import { InMemoryTodoRepository } from './repositories/InMemoryTodoRepository';
export const container = new Container<ContainerRegistry>();
container.register('ITodoRepository', { useClass: InMemoryTodoRepository, lifecycle: Lifecycle.Singleton});
container.register('ITodoService', { useClass: TodoService, dependencies: ['ITodoRepository'], lifecycle: Lifecycle.Singleton});Step 4: Use It
Section titled “Step 4: Use It”import { container } from './container.gen';
const todoService = container.resolve('ITodoService');// ^? ITodoService - Full type safety!
await todoService.createTodo({ title: 'Learn IoC Arise', description: 'Study dependency injection'});
const todos = await todoService.getAllTodos();