UNPKG

@ns3/react-di

Version:

React implementation of dependency injection based on @ns3/di

23 lines (18 loc) 703 B
import { createContext, useContext, useMemo } from 'react'; import { Container } from '@ns3/di'; import { unpackFactoryOrValue } from '@ns3/ts-utils'; const DiContext = createContext(undefined); const DiProvider = DiContext.Provider; function useDependency(type) { const container = useContext(DiContext); return container.get(type); } function useDependencyInjection(factory = () => []) { return useMemo(() => { const container = Container.make(); const dependencies = unpackFactoryOrValue(factory); dependencies.filter(config => config).forEach(config => container.provide(config)); return container; }, []); } export { DiProvider, useDependency, useDependencyInjection };