Угловая инъекция: неразрешенные параметры, если InjectionToken помещен в объект - PullRequest
0 голосов
/ 25 сентября 2018

Я реализовал интерфейс 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 в объекте вызвать неразрешенную ошибку параметра?

...