Skip to content

Commit baf79ef

Browse files
remove SelfBIndingResolver as one tests check that no automatic self binding happens; ensure that ConstructorScorer doesn't discard a constructor with ServiceKey attribute in favour of another constructor
1 parent 09ef1f9 commit baf79ef

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

src/Ninject.Web.AspNetCore.ComplianceTest/KeyedDependencyInjectionComplianceTests.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using Microsoft.Extensions.DependencyInjection;
3+
using Ninject.Planning.Bindings.Resolvers;
34

45
namespace Ninject.Web.AspNetCore.ComplianceTest;
56

@@ -13,6 +14,8 @@ public class KeyedDependencyInjectionComplianceTests : Microsoft.Extensions.Depe
1314
protected override IServiceProvider CreateServiceProvider(IServiceCollection serviceCollection)
1415
{
1516
var kernel = new AspNetCoreKernel();
17+
// remove autobinding as CreateServiceWithKeyedParameter e.g. tests that no autobinding happens.
18+
kernel.Components.Remove<IMissingBindingResolver, SelfBindingResolver>();
1619
var factory = new NinjectServiceProviderFactory(kernel);
1720

1821
return factory.CreateBuilder(serviceCollection).Build();

src/Ninject.Web.AspNetCore/Planning/ParameterTargetWithKeyedSupport.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,22 @@ public ParameterTargetWithKeyedSupport(MethodBase method, ParameterInfo site) :
1313
{
1414
}
1515

16+
public override bool HasDefaultValue
17+
{
18+
get
19+
{
20+
var result = this.Site.HasDefaultValue;
21+
#if NET8_0_OR_GREATER
22+
// ensure that constructor scorer knows that we have a default value for parameters decorated with ServiceKey
23+
// as the DefaultValueBindingResolver is only a MissingBindingResolver, the
24+
// ParameterTargetWithKeyedSupport.ResolveWithin method already
25+
// provided a default value before any Ninject resolution for the value happens.
26+
result = result || GetCustomAttributes(typeof (ServiceKeyAttribute), true)?.Length > 0;
27+
#endif
28+
return result;
29+
}
30+
}
31+
1632
protected override Func<IBindingMetadata, bool> ReadConstraintFromTarget()
1733
{
1834
#if NET8_0_OR_GREATER

0 commit comments

Comments
 (0)