import { InjectionKey, provide } from 'vue'; import { useCollectionState } from '@/presentation/components/Shared/Hooks/UseCollectionState'; import { useApplication } from '@/presentation/components/Shared/Hooks/UseApplication'; import { useCollectionStateKey, useApplicationKey, useEnvironmentKey, } from '@/presentation/injectionSymbols'; import { IApplicationContext } from '@/application/Context/IApplicationContext'; import { Environment } from '@/infrastructure/Environment/Environment'; export function provideDependencies(context: IApplicationContext) { registerSingleton(useApplicationKey, useApplication(context.app)); registerTransient(useCollectionStateKey, () => useCollectionState(context)); registerSingleton(useEnvironmentKey, Environment.CurrentEnvironment); } function registerSingleton( key: InjectionKey, value: T, ) { provide(key, value); } function registerTransient( key: InjectionKey<() => T>, factory: () => T, ) { provide(key, factory); }