I\'ve been trying to switch my app over to AoT compilation and have been getting this error in the production environment when the app is loading (it works fine locally).
One possible cause of this error is if you are not decorating your IconService
class with @Injectable()
. If that is the cause, adding that decoration above the class declaration will fix the error.
Worked for me when I used following while importing the Service in app.module.ts
{provide: AuthService,
depends: HttpClientModule}
I have encountered similar problem. I solved it by changing export order in the barrel.
Basic service files:
// dependency.service.ts
@Injectable()
export class DependencyService { }
// dependant.service.ts
import { DependencyService } from '.';
@Injectable()
export class DependantService {
constructor(private dependency: DependencyService) { }
}
Following barrel causes the error:
// index.ts
export * from './dependant.service';
export * from './dependency.service';
While following one works:
// index.ts
export * from './dependency.service';
export * from './dependant.service';
Fixed this by providing the IconService in a different way.
{
provide: IconService,
useFactory: iconServiceFactory,
deps: [Http, IconConfiguror],
},
and the factory itself
export function iconServiceFactory(http: Http, iconConfiguror: IconConfiguror) {
return new IconService(http, iconConfiguror);
}
I guess for some reason the Http wasn't being provided (even though HttpModule was imported) so I had to declare it as a dependency.
Sometimes is single way to fix it - manually describe parameters.
static get parameters() { return [Http, IconConfiguror] }
constructor(private http:Http, private iconConfiguror:IconConfiguror) {
My issue was that I was inheriting from a base class, and I had decorated that base class with @Injectable. The inheriting class was the class that should have the @Injectable attribute, not the base class. It seems that when the compiler sees the @Injectable attibute, it checks to make sure all the properties in the constructor can be injected. If not, it's an error. I solved it by removing the @Injectable attibute from that class.