public void Contravariance_ShouldReturnIEnumerableOfAllCompatibleActions() { // Arrange var targets = CreateTargetContainer(); targets.RegisterObject(new Action <BaseClass, List <string> >(HandleBase)); targets.RegisterObject(new Action <BaseClassChild, List <string> >(HandleChild)); targets.RegisterObject(new Action <BaseClassGrandchild, List <string> >(HandleGrandchild)); var output1 = new List <string>(); var output2 = new List <string>(); var input1 = new BaseClassChild(); var input2 = new BaseClassGrandchild(); var container = CreateContainer(targets); // Act // run this two times - one for child (2 results) and grandchild (3 results) var result1 = container.Resolve <IEnumerable <Action <BaseClassChild, List <string> > > >(); var result2 = container.Resolve <IEnumerable <Action <BaseClassGrandchild, List <string> > > >(); foreach (var action in result1) { action(input1, output1); } foreach (var action in result2) { action(input2, output2); } // Assert // CHANGE FOR #59: Ordering is now strictly registration order. Assert.Equal(new[] { nameof(HandleBase), nameof(HandleChild) }, output1); Assert.Equal(new[] { nameof(HandleBase), nameof(HandleChild), nameof(HandleGrandchild) }, output2); }
void HandleChild(BaseClassChild baseClassChild, List <string> output) { if (baseClassChild != null) { output.Add(nameof(HandleChild)); } }