@@ -125,7 +125,7 @@ public IEnumerable<DependencyNode> TryBuild(
125125 when namedTypeSymbol . IsGenericType || marker . IsMarkerBased ( setup , namedTypeSymbol ) :
126126 {
127127 var isDone = false ;
128- foreach ( var item in map )
128+ foreach ( var item in map . OrderByDescending ( i => i . Value . Binding . Id ) )
129129 {
130130 if ( item . Key . Type is not INamedTypeSymbol nextNamedTypeSymbol )
131131 {
@@ -349,7 +349,7 @@ public IEnumerable<DependencyNode> TryBuild(
349349 var injection = injectionInfo . Injection ;
350350 var dependency = map . TryGetValue ( injection , out var sourceNode )
351351 ? new Dependency ( true , sourceNode , injection , node . Node )
352- : new Dependency ( false , new DependencyNode ( 0 , node . Node . Binding ) , injection , node . Node ) ;
352+ : new Dependency ( false , new DependencyNode ( 0 , node . Node . Binding , node . Node . TypeConstructor ) , injection , node . Node ) ;
353353
354354 edges . Add ( dependency ) ;
355355 }
@@ -363,8 +363,7 @@ public IEnumerable<DependencyNode> TryBuild(
363363 var overrideMap = new Dictionary < Injection , DependencyNode > ( ) ;
364364 foreach ( var rootNode in from node in graph . Vertices where node . Root is not null select node )
365365 {
366- var typeConstructor = typeConstructorFactory ( ) ;
367- Override ( processedNodes , [ ] , overrideMap , setup , graph , rootNode , ref maxId , typeConstructor , overridingEntries ) ;
366+ Override ( processedNodes , [ ] , overrideMap , setup , graph , rootNode , ref maxId , overridingEntries ) ;
368367 }
369368
370369 if ( overridingEntries . Count > 0 )
@@ -416,7 +415,6 @@ private void Override(HashSet<DependencyNode> processedNodes,
416415 Graph < DependencyNode , Dependency > graph ,
417416 DependencyNode targetNode ,
418417 ref int maxId ,
419- ITypeConstructor typeConstructor ,
420418 List < GraphEntry < DependencyNode , Dependency > > overridingEntries )
421419 {
422420 if ( ! processedNodes . Add ( targetNode ) )
@@ -429,29 +427,40 @@ private void Override(HashSet<DependencyNode> processedNodes,
429427 return ;
430428 }
431429
430+ var typeConstructor = targetNode . TypeConstructor ;
432431 if ( targetNode . Factory is { } factory )
433432 {
434433 foreach ( var resolver in factory . Resolvers )
435434 {
436- //typeConstructor.Construct(setup, )
437435 foreach ( var @override in resolver . Overrides )
438436 {
439- overriddenInjections . Add ( @override . Injection ) ;
440- if ( ! overrideMap . TryGetValue ( @override . Injection , out _ ) )
437+ if ( @override . Injections . IsDefaultOrEmpty )
441438 {
442- var overrideBinding = CreateConstructBinding (
443- setup ,
444- targetNode ,
445- @override . Injection ,
446- @override . Source . ContractType ,
447- Lifetime . PerResolve ,
448- ++ maxId ,
449- MdConstructKind . Override ,
450- state : @override ) ;
439+ continue ;
440+ }
451441
452- foreach ( var sourceNode in CreateNodes ( setup , typeConstructorFactory ( ) , overrideBinding ) )
442+ MdBinding ? overrideBinding = null ;
443+ foreach ( var overrideInjection in @override . Injections )
444+ {
445+ var injection = overrideInjection with { Type = typeConstructor . Construct ( setup , overrideInjection . Type ) } ;
446+ var contractType = typeConstructor . Construct ( setup , @override . Source . ContractType ) ;
447+ overriddenInjections . Add ( injection ) ;
448+ if ( ! overrideMap . TryGetValue ( injection , out _ ) )
453449 {
454- overrideMap [ @override . Injection ] = sourceNode ;
450+ overrideBinding ??= CreateConstructBinding (
451+ setup ,
452+ targetNode ,
453+ injection ,
454+ contractType ,
455+ Lifetime . PerResolve ,
456+ ++ maxId ,
457+ MdConstructKind . Override ,
458+ state : @override ) ;
459+
460+ foreach ( var sourceNode in CreateNodes ( setup , typeConstructor , overrideBinding ) )
461+ {
462+ overrideMap [ injection ] = sourceNode ;
463+ }
455464 }
456465 }
457466 }
@@ -464,7 +473,7 @@ private void Override(HashSet<DependencyNode> processedNodes,
464473 {
465474 if ( ! overriddenInjections . Contains ( dependency . Injection ) || ! overrideMap . TryGetValue ( dependency . Injection , out var overridingSourceNode ) )
466475 {
467- Override ( processedNodes , overriddenInjections , overrideMap , setup , graph , dependency . Source , ref maxId , typeConstructor , overridingEntries ) ;
476+ Override ( processedNodes , overriddenInjections , overrideMap , setup , graph , dependency . Source , ref maxId , overridingEntries ) ;
468477 newDependencies . Add ( dependency ) ;
469478 continue ;
470479 }
0 commit comments