Skip to content

bug(multiple): services provided in root are also provided in NgModules #28443

@json-derulo

Description

@json-derulo

Is this a regression?

  • Yes, this behavior used to work in the previous version

The previous version in which this bug was not present was

No response

Description

I am maintaining an Angular library built on top of Angular Material. Among others, this library includes custom components which are to be opened inside a dialog. Here is what the module of such a component looks like:

@NgModule({
  declarations: [MyComponent],
  imports: [MatDialogModule],
  export: [MyComponent],
})
export class MyModule {}

For applications which use that component in an NgModule, this works fine. However one of the applications is in the progress of migrating to standalone. After making the component standalone and adding MyModule to the imports, the unit tests involving the MatDialog service opening MyComponent failed. After investigation, I found out that the instance injected by the component constructor and the instance injected by TestBed.inject() are now two separate ones.

I have confirmed with the Angular core team that this is by design, see angular/angular#53929.

The root cause is that MatDialogModule has MatDialog in its providers:

providers: [MatDialog],

IMHO it should be removed from the providers, as the service is providedIn: 'root'.

The MatSnackBar has the same issue, there might be more affected services in this repo.

Reproduction

Repo: https://github.com/json-derulo/ng17-dialog-issue
Steps to reproduce:

  1. Run ng test

Expected Behavior

There is only one instance of MatDialog and the test case in the repro pass

Actual Behavior

There are multiple instances of MatDialog and the test case in the repro fails

Environment

Angular CLI: 17.0.10
Node: 18.18.2
Package Manager: npm 9.8.1
OS: darwin x64

Angular: 17.0.9
... animations, common, compiler, compiler-cli, core, forms
... platform-browser, platform-browser-dynamic, router

Package Version

@angular-devkit/architect 0.1700.10
@angular-devkit/build-angular 17.0.10
@angular-devkit/core 17.0.10
@angular-devkit/schematics 17.0.10
@angular/cdk 17.1.0
@angular/cli 17.0.10
@angular/material 17.1.0
@schematics/angular 17.0.10
rxjs 7.8.1
typescript 5.2.2
zone.js 0.14.3

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3An issue that is relevant to core functions, but does not impede progress. Important, but not urgentarea: manyArea label for issues related to many components

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions