Я реализовал интерфейс Service
, чтобы разрешить насмешку во время тестирования.Этот интерфейс вводится с использованием InjectionToken
.InjectionToken
- это постоянный идентификатор.Я хотел собрать все эти константы в один объект, который позволяет легко их использовать:
const TYPES = {
Service: new InjectionToken<Service>("service"),
};
export default TYPES;
Теперь я могу использовать TYPES.Service
, чтобы получить InjectionToken
, устанавливающий провайдера:
providers: [{
provide: TYPES.Service,
useClass: DefaultService
},
Аннотацию @Inject()
также легко установить:
constructor(@Inject(TYPES.Service) service: Service)
Но если я запускаю этот код, не все параметры разрешаются:
ERROR in : Can't resolve all parameters for FooComponent in /../src/app/components/foo/foo.component.ts: (?).
Этот шаблон использования объектаотлично работает для DI с InversifyJS
в другой библиотеке TypeScript, которую я строю.Ошибка происходит из-за чего-то с токеном инъекции внутри объекта.Если я поставлю InjectionToken
за пределы объекта, он будет работать:
export const SERVICE_INJECTION_TOKEN = new InjectionToken<Service>("service");
Я добавил @Injectable()
к DefaultService
и проверил импорт полизаполнения.
Почему установкаInjectionToken
в объекте вызвать неразрешенную ошибку параметра?