Exemple #1
0
        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);
        }
Exemple #2
0
 void HandleGrandchild(BaseClassGrandchild baseClassGrandchild, List <string> output)
 {
     if (baseClassGrandchild != null)
     {
         output.Add(nameof(HandleGrandchild));
     }
 }