Skip to content

Commit 7929d38

Browse files
committed
correct an issue with constructors using interfaces for singleton injeciton.
1 parent 5b60356 commit 7929d38

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

SimpleInjection/Injection/Host.cs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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)

SimpleInjection/SimpleInjection.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
1010
<PackageId>SimpleInjection</PackageId>
11-
<Version>0.9.6.5</Version>
11+
<Version>0.9.6.6</Version>
1212
<Authors>Derek Gooding</Authors>
1313
<Company>Derek Gooding</Company>
1414
<Description>

0 commit comments

Comments
 (0)