public void TestMethod4b()
        {
            var dependencyResolver = new Leos.DependencyResolver.DependencyResolver(new Logger());

            dependencyResolver.Bind<IAnimal>().To<Dog>().When<AnimalType>().IsEqualTo(AnimalType.Dog);
            dependencyResolver.Bind<IAnimal>().To<Cat>().When<AnimalType>().IsEqualTo(AnimalType.Cat);

            var animalCage = new AnimalCage();

            animalCage.AnimalType = AnimalType.Dog;
            dependencyResolver.ResolveDependencies(animalCage);
            Assert.IsTrue(animalCage.Animal is Dog);
            animalCage.GreetAnimal();

            animalCage.AnimalType = AnimalType.Cat;
            dependencyResolver.ResolveDependencies(animalCage);
            Assert.IsTrue(animalCage.Animal is Cat);
            animalCage.GreetAnimal();

            animalCage.AnimalType = AnimalType.Rabbit;

            try
            {
                dependencyResolver.ResolveDependencies(animalCage);
            }
            catch (ServiceNotFoundException)
            {
                // correct! There is no binding for IAnimal when 'AnimalType = Rabbit'
            }
        }
        public void TestMethod1b()
        {
            var dependencyResolver = new Leos.DependencyResolver.DependencyResolver("DependencyResolverTests_Tutorial01b", new Logger());
            var animalCage = new AnimalCage();
            dependencyResolver.ResolveDependencies(animalCage);

            Assert.IsNotNull(animalCage.Animal, "Dependency could not be resolved");

            animalCage.GreetAnimal();
        }
        public void TestMethod4a()
        {
            var dependencyResolver = new Leos.DependencyResolver.DependencyResolver(new Logger());
            dependencyResolver.Bind<IAnimal>().To<Dog>(); // manual binding
            var animalCage = new AnimalCage();
            dependencyResolver.ResolveDependencies(animalCage);

            Assert.IsNotNull(animalCage.Animal, "Animal1 dependency could not be resolved");
            Assert.IsNull(animalCage.Animal2, "Animal2 should not have been resolved");
        }
        public void TestMethod3a()
        {
            var dependencyResolver = new Leos.DependencyResolver.DependencyResolver("DependencyResolverTests_Tutorial03a", new Logger());
            var game = new Game();
            dependencyResolver.ResolveDependencies(game, recursive: true);

            Assert.IsTrue(game.Player is Ninja);
            Assert.IsTrue(game.Player.Weapon is Sword);

            game.Player.HitEnemy();
        }
 public void TestMethod2c()
 {
     try
     {
         var dependencyResolver = new Leos.DependencyResolver.DependencyResolver("DependencyResolverTests_Tutorial02c", new Logger());
         Assert.Fail("Expected exception of type 'ConfigurationAlreadyInUseException'");
     }
     catch(ConfigurationAlreadyInUseException ex)
     {
         Trace.WriteLine(ex.Message);
     }
     // we don't even need to test anything else, DependencyResolver must crash when populating the DependencyInfo list
 }
        public void TestMethod2b()
        {
            var dependencyResolver = new Leos.DependencyResolver.DependencyResolver("DependencyResolverTests_Tutorial02b", new Logger());
            var animalCage = new AnimalCage();

            animalCage.AnimalType = AnimalType.Dog;
            dependencyResolver.ResolveDependencies(animalCage);
            Assert.IsTrue(animalCage.Animal is Dog);
            animalCage.GreetAnimal();

            animalCage.AnimalType = AnimalType.Cat;
            dependencyResolver.ResolveDependencies(animalCage);
            Assert.IsTrue(animalCage.Animal is Cat);
            animalCage.GreetAnimal();
        }
        public void TestMethod2a()
        {
            var dependencyResolver = new Leos.DependencyResolver.DependencyResolver("DependencyResolverTests_Tutorial02a", new Logger());
            var animalCage = new AnimalCage();

            try
            {
                dependencyResolver.ResolveDependencies(animalCage);
                Assert.Fail("Expected exception of type 'QueryablePropertyNotFoundException'");
            }
            catch (QueryablePropertyNotFoundException)
            {
                // correct! a queryable property of type AnimalType needs to be defined in class AnimalCage
            }
        }
        public void TestMethod1a()
        {
            var dependencyResolver = new Leos.DependencyResolver.DependencyResolver("DependencyResolverTests_Tutorial01a", new Logger());
            var animalCage = new AnimalCage();

            try
            {
                dependencyResolver.ResolveDependencies(animalCage);
                Assert.Fail("Expected exception of type 'ServiceNotFoundException'");
            }
            catch(ServiceNotFoundException)
            {
                // correct! A service could not be found since we never defined a class to resolve the 'IAnimal' dependency
            }
        }
        public void TestMethod3b()
        {
            var dependencyResolver = new Leos.DependencyResolver.DependencyResolver("DependencyResolverTests_Tutorial03b", new Logger());

            var game = new Game();
            // game.Player.WeaponType = WeaponType.Shuriken; // will produce a NullReferenceException

            // here it starts to get tricky. We can't specify the WeaponType since the "Player" dependency has not been resolved yet.
            // There are several approaches to fix this, but I will need some time to think on one that makes the most sense.

            dependencyResolver.ResolveDependencies(game, recursive: true);
            game.Player.HitEnemy();

            game.Player.WeaponType = WeaponType.Shuriken;
            dependencyResolver.ResolveDependencies(game.Player);
            game.Player.HitEnemy();
        }