fix(ivy): resolve forward refs in providers (#26766)

PR Close #26766
This commit is contained in:
Kara Erickson
2018-10-25 13:58:33 -07:00
committed by Matias Niemelä
parent f76ce84ae1
commit 2fd4c372d5
2 changed files with 51 additions and 18 deletions

View File

@ -357,20 +357,19 @@ function providerToRecord(provider: SingleProvider): Record<any> {
* @param provider provider to convert to factory
*/
export function providerToFactory(provider: SingleProvider): () => any {
let token = resolveForwardRef(provider);
let factory: (() => any)|undefined = undefined;
if (isTypeProvider(provider)) {
return injectableDefFactory(provider);
return injectableDefFactory(resolveForwardRef(provider));
} else {
token = resolveForwardRef(provider.provide);
if (isValueProvider(provider)) {
factory = () => provider.useValue;
factory = () => resolveForwardRef(provider.useValue);
} else if (isExistingProvider(provider)) {
factory = () => inject(provider.useExisting);
factory = () => inject(resolveForwardRef(provider.useExisting));
} else if (isFactoryProvider(provider)) {
factory = () => provider.useFactory(...injectArgs(provider.deps || []));
} else {
const classRef = (provider as StaticClassProvider | ClassProvider).useClass || token;
const classRef = resolveForwardRef(
(provider as StaticClassProvider | ClassProvider).useClass || provider.provide);
if (hasDeps(provider)) {
factory = () => new (classRef)(...injectArgs(provider.deps));
} else {