@@ -113,7 +113,7 @@ private static void ProcessServicesWithNoDependencies(List<ServiceDescriptor> re
113113 }
114114 }
115115
116- private void ProcessRemainingServices ( List < ServiceDescriptor > result , List < ServiceDescriptor > remaining )
116+ private static void ProcessRemainingServices ( List < ServiceDescriptor > result , List < ServiceDescriptor > remaining )
117117 {
118118 var lastCount = int . MaxValue ;
119119 while ( remaining . Count > 0 && lastCount != remaining . Count )
@@ -124,7 +124,7 @@ private void ProcessRemainingServices(List<ServiceDescriptor> result, List<Servi
124124 {
125125 var descriptor = remaining [ i ] ;
126126 var allDependenciesResolved = descriptor . Dependencies . All ( dep =>
127- _serviceDescriptors . Any ( sd => sd . ServiceType == dep && result . Contains ( sd ) ) ) ;
127+ CanResolveDependency ( dep , result ) ) ;
128128
129129 if ( allDependenciesResolved )
130130 {
@@ -141,6 +141,20 @@ private void ProcessRemainingServices(List<ServiceDescriptor> result, List<Servi
141141 }
142142 }
143143
144+ private static bool CanResolveDependency ( Type dependencyType , List < ServiceDescriptor > processedDescriptors )
145+ {
146+ // Check if we have a direct match (concrete type)
147+ if ( processedDescriptors . Any ( sd => sd . ServiceType == dependencyType ) )
148+ return true ;
149+
150+ // If it's an interface, check if we have a concrete implementation
151+ return dependencyType . IsInterface &&
152+ processedDescriptors . Any ( sd =>
153+ dependencyType . IsAssignableFrom ( sd . ServiceType ) &&
154+ ! sd . ServiceType . IsInterface &&
155+ ! sd . ServiceType . IsAbstract ) ;
156+ }
157+
144158 private void CreateFactory ( ServiceDescriptor descriptor )
145159 {
146160 switch ( descriptor . Lifetime )
0 commit comments