import { ContainerModule } from 'inversify'; import { RaceService } from '@/lib/services/races/RaceService'; import { RaceResultsService } from '@/lib/services/races/RaceResultsService'; import { RaceStewardingService } from '@/lib/services/races/RaceStewardingService'; import { RacesApiClient } from '@/lib/api/races/RacesApiClient'; import { ProtestsApiClient } from '@/lib/api/protests/ProtestsApiClient'; import { PenaltiesApiClient } from '@/lib/api/penalties/PenaltiesApiClient'; import { RACE_SERVICE_TOKEN, RACE_RESULTS_SERVICE_TOKEN, RACE_STEWARDING_SERVICE_TOKEN, RACE_API_CLIENT_TOKEN, PROTEST_API_CLIENT_TOKEN, PENALTY_API_CLIENT_TOKEN, } from '../tokens'; export const RaceModule = new ContainerModule((options) => { const bind = options.bind; // Race Service - creates its own dependencies per contract bind(RACE_SERVICE_TOKEN) .toDynamicValue((ctx) => { const raceApiClient = ctx.get(RACE_API_CLIENT_TOKEN); return new RaceService(raceApiClient); }) .inSingletonScope(); // Race Results Service - creates its own dependencies per contract bind(RACE_RESULTS_SERVICE_TOKEN) .to(RaceResultsService) .inSingletonScope(); // Race Stewarding Service - creates its own dependencies per contract bind(RACE_STEWARDING_SERVICE_TOKEN) .to(RaceStewardingService) .inSingletonScope(); });