diff --git a/src/Ninject.Test/Integration/ConditionalBindingTests.cs b/src/Ninject.Test/Integration/ConditionalBindingTests.cs index d3d2a83c..48791db9 100644 --- a/src/Ninject.Test/Integration/ConditionalBindingTests.cs +++ b/src/Ninject.Test/Integration/ConditionalBindingTests.cs @@ -352,6 +352,39 @@ public void WhenNoAncestorMatchesAppliesToGrandParentAndParent() barack.Warrior.Weapon.Should().BeOfType(); } + [Fact] + public void WhenMemberHasDoesNotConsiderAttributeOnTarget() + { + kernel.Bind().ToSelf(); + kernel.Bind().To(); + kernel.Bind().To().WhenMemberHas(); + + var knight = kernel.Get(); + knight.Weapon.Should().BeOfType(); + } + + [Fact] + public void WhenMemberHasDoesConsiderAttributeOnMember() + { + kernel.Bind().ToSelf(); + kernel.Bind().To().WhenMemberHas(); + kernel.Bind().To(); + + var knight = kernel.Get(); + knight.Weapon.Should().BeOfType(); + } + + [Fact] + public void WhenTargetHasDoesConsiderAttributeOnTarget() + { + kernel.Bind().ToSelf(); + kernel.Bind().To(); + kernel.Bind().To().WhenTargetHas(); + + var knight = kernel.Get(); + knight.Weapon.Should().BeOfType(); + } + public interface IGenericService { } @@ -391,5 +424,16 @@ public AnotherGenericService(IWarrior warrior) public IWarrior Warrior { get; protected set; } } + + public class Knight + { + public IWeapon Weapon { get; private set; } + + [Strong] + public Knight([Weak] IWeapon weapon) + { + this.Weapon = weapon; + } + } } } \ No newline at end of file diff --git a/src/Ninject/Planning/Bindings/BindingConfigurationBuilder.cs b/src/Ninject/Planning/Bindings/BindingConfigurationBuilder.cs index bb060d88..2df02af3 100644 --- a/src/Ninject/Planning/Bindings/BindingConfigurationBuilder.cs +++ b/src/Ninject/Planning/Bindings/BindingConfigurationBuilder.cs @@ -310,7 +310,7 @@ public IBindingInNamedWithOrOnSyntax WhenMemberHas(Type attributeType) throw new InvalidOperationException(ExceptionFormatter.InvalidAttributeTypeUsedInBindingCondition(this.serviceNames, "WhenMemberHas", attributeType)); } - this.BindingConfiguration.Condition = r => r.Target != null && r.Target.IsDefined(attributeType, true); + this.BindingConfiguration.Condition = r => r.Target != null && r.Target.Member.IsDefined(attributeType, true); return this; }