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 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
            }
        }