@@ -14,7 +14,7 @@ import {
14
14
OverlayRef ,
15
15
ScrollStrategy ,
16
16
} from '@angular/cdk/overlay' ;
17
- import { ComponentPortal , ComponentType , PortalInjector , TemplatePortal } from '@angular/cdk/portal' ;
17
+ import { ComponentPortal , ComponentType , TemplatePortal } from '@angular/cdk/portal' ;
18
18
import { Location } from '@angular/common' ;
19
19
import {
20
20
Inject ,
@@ -25,6 +25,7 @@ import {
25
25
Optional ,
26
26
SkipSelf ,
27
27
TemplateRef ,
28
+ StaticProvider ,
28
29
} from '@angular/core' ;
29
30
import { defer , Observable , of as observableOf , Subject } from 'rxjs' ;
30
31
import { startWith } from 'rxjs/operators' ;
@@ -215,9 +216,11 @@ export class MatDialog implements OnDestroy {
215
216
*/
216
217
private _attachDialogContainer ( overlay : OverlayRef , config : MatDialogConfig ) : MatDialogContainer {
217
218
const userInjector = config && config . viewContainerRef && config . viewContainerRef . injector ;
218
- const injector = new PortalInjector ( userInjector || this . _injector , new WeakMap ( [
219
- [ MatDialogConfig , config ]
220
- ] ) ) ;
219
+ const injector = Injector . create ( {
220
+ parent : userInjector || this . _injector ,
221
+ providers : [ { provide : MatDialogConfig , useValue : config } ]
222
+ } ) ;
223
+
221
224
const containerPortal = new ComponentPortal ( MatDialogContainer ,
222
225
config . viewContainerRef , injector , config . componentFactoryResolver ) ;
223
226
const containerRef = overlay . attach < MatDialogContainer > ( containerPortal ) ;
@@ -283,29 +286,29 @@ export class MatDialog implements OnDestroy {
283
286
private _createInjector < T > (
284
287
config : MatDialogConfig ,
285
288
dialogRef : MatDialogRef < T > ,
286
- dialogContainer : MatDialogContainer ) : PortalInjector {
289
+ dialogContainer : MatDialogContainer ) : Injector {
287
290
288
291
const userInjector = config && config . viewContainerRef && config . viewContainerRef . injector ;
289
292
290
293
// The MatDialogContainer is injected in the portal as the MatDialogContainer and the dialog's
291
294
// content are created out of the same ViewContainerRef and as such, are siblings for injector
292
295
// purposes. To allow the hierarchy that is expected, the MatDialogContainer is explicitly
293
296
// added to the injection tokens.
294
- const injectionTokens = new WeakMap < any , any > ( [
295
- [ MatDialogContainer , dialogContainer ] ,
296
- [ MAT_DIALOG_DATA , config . data ] ,
297
- [ MatDialogRef , dialogRef ]
298
- ] ) ;
297
+ const providers : StaticProvider [ ] = [
298
+ { provide : MatDialogContainer , useValue : dialogContainer } ,
299
+ { provide : MAT_DIALOG_DATA , useValue : config . data } ,
300
+ { provide : MatDialogRef , useValue : dialogRef }
301
+ ] ;
299
302
300
303
if ( config . direction &&
301
304
( ! userInjector || ! userInjector . get < Directionality | null > ( Directionality , null ) ) ) {
302
- injectionTokens . set ( Directionality , {
303
- value : config . direction ,
304
- change : observableOf ( )
305
+ providers . push ( {
306
+ provide : Directionality ,
307
+ useValue : { value : config . direction , change : observableOf ( ) }
305
308
} ) ;
306
309
}
307
310
308
- return new PortalInjector ( userInjector || this . _injector , injectionTokens ) ;
311
+ return Injector . create ( { parent : userInjector || this . _injector , providers } ) ;
309
312
}
310
313
311
314
/**
0 commit comments