A factory function provider in Angular can have dependencies using the deps property.

TypeScript
@NgModule({
  providers: [
    {
      provide: SOME_INJECTION_TOKEN,
      deps: [MyService],
      useFactory: (myService: myService) => {
        return myService.someMethod();
      },
    },
  ],
})
export class MyModule {}

The problem is that you need to write the dependencies twice: once for the deps property and once as arguments of the useFactory function. Thanks to the new inject() function in Angular 14 there is now a better way to inject dependencies.

Call the inject() function and pass your dependency (here MyService) as argument. It will provide you the dependency and the return value is type-safe.

TypeScript
import { inject } from "@angular/core";

@NgModule({
  providers: [
    {
      provide: SOME_INJECTION_TOKEN,
      useFactory: () => {
        const myService = inject(MyService);
        return myService.someMethod();

        // Or as a one-liner:
        // return inject(MyService).someMethod();
      },
    },
  ],
})
export class MyModule {}