Represents a class that can load a dependency map from a given set o fassemblies
示例#1
0
        public void ShouldBeAbleToLoadSampleAssemblyWithoutRunningIntoConstructorNotFoundException()
        {
            var loader = new DependencyMapLoader();
            var map = loader.LoadFromBaseDirectory("SampleAssembly.dll");

            var container = map.CreateContainer();
            var result = container.GetInstance<object>("Sample");

            Assert.AreEqual(42, result);
        }
示例#2
0
        public void ShouldBeAbleToGetAServiceThatImplementsSimpleProperties()
        {
            var loader = new DependencyMapLoader();
            var map = loader.LoadFromBaseDirectory("SampleAssembly.dll");
            //var map = new DependencyMap();
            //map.AddService<IFalseDependency>(x=>new SampleFalseDependency());
            var container = map.CreateContainer();
            var result = container.GetInstance<IFalseDependency>();

            Assert.IsNotNull(result,"The container did not create IFalseDependency instance");
        }
示例#3
0
        public void ShouldLoadAllImplementationsAndInterfaces()
        {
            var assembly = typeof(IDBConnection).Assembly;

            var loader = new DependencyMapLoader();
            var map = loader.LoadFrom(assembly);
            var container = map.CreateContainer();

            var testRepo = container.GetInstance<ITestRepo>();
            Assert.IsNotNull(testRepo);
        }
示例#4
0
        public void ShouldBeAbleToAutomaticallyInjectBaseGenericInterfaceTypes()
        {
            var loader = new DependencyMapLoader();
            var map = loader.LoadFromBaseDirectory("Sample*.dll");
            map.AddService<IFoo<int>, SampleGenericImplementation>();

            var dependencies = map.Dependencies;

            var container = map.CreateContainer();
            Assert.IsTrue(container.Contains(typeof(IBaz<int>), "SampleGenericImplementation"));
            Assert.IsTrue(container.Contains(typeof(IFoo<int>), "SampleGenericImplementation"));
        }
示例#5
0
        public void ShouldLoadAndCreateContainerFromBaseDirectory()
        {
            var loader = new DependencyMapLoader();

            var map = loader.LoadFromBaseDirectory("*.UnitTests.dll");
            var container = map.CreateContainer();

            Assert.IsNotNull(container);

            var vehicle = container.GetInstance<IVehicle>();
            Assert.IsNotNull(vehicle);
        }
示例#6
0
        public void ShouldBeAbleToFilterLoadedServicesUsingASinglePredicate()
        {
            Predicate<IServiceInfo> serviceFilter = service => service.ServiceType != typeof(IVehicle);

            var loader = new DependencyMapLoader();
            loader.ServiceFilter = serviceFilter;

            var map = loader.LoadFrom(AppDomain.CurrentDomain.BaseDirectory, "*.UnitTests.dll");
            var container = map.CreateContainer();

            Assert.IsNotNull(container);

            // There should be no IVehicle container instances
            // in this container since the IVehicle service has been filtered
            // out of the container
            var vehicle = container.GetInstance<IVehicle>();
            Assert.IsNull(vehicle);
        }
示例#7
0
        public void ShouldBeAbleToLoadEnumerableServicesByDefault()
        {
            var loader = new DependencyMapLoader();
            loader.ServiceFilter = info => !string.IsNullOrEmpty(info.ServiceName) && info.ServiceName.StartsWith("Baz")
                && info.ServiceType == typeof(IBaz<int>) || info.ServiceType == typeof(IFizz);
            var map = loader.LoadFrom(typeof(IFoo<>).Assembly);
            var container = map.CreateContainer();

            Assert.IsNotNull(container);

            var fizz = container.GetInstance<IFizz>();
            Assert.IsNotNull(fizz);

            Assert.AreEqual(3, fizz.Services.Count());

            var services = fizz.Services.ToArray();
            Assert.IsInstanceOfType(typeof(Baz1), services[0]);
            Assert.IsInstanceOfType(typeof(Baz2), services[1]);
            Assert.IsInstanceOfType(typeof(Baz3), services[2]);
        }
        /// <summary>
        /// Compiles the target IOC container.
        /// </summary>
        /// <returns>Returns <c>true</c> if the operation succeeded. Otherwise, it will return <c>false</c>.</returns>
        public override bool Execute()
        {
            bool result = true;
            try
            {
                string targetPath = GetTargetPath(TargetAssemblies);
                targetPath = string.IsNullOrEmpty(targetPath) ? Environment.CurrentDirectory : targetPath;
                targetPath = Path.GetDirectoryName(targetPath);

                var targetFiles = Path.GetFileName(TargetAssemblies);
                var loader = new DependencyMapLoader();
                var dependencyMap = loader.LoadFrom(targetPath, targetFiles);

                var typeName = "MicroContainer" ?? TypeName;
                var namespaceName = "Hiro.Containers" ?? NamespaceName;
                var assemblyName = "Hiro.CompiledContainers" ?? AssemblyName;

                var compiler = new ContainerCompiler();
                var compiledAssembly = compiler.Compile(typeName, namespaceName, assemblyName, dependencyMap);

                Console.WriteLine("Compiling {0}", OutputAssemblyFileName);
                compiledAssembly.Write(OutputAssemblyFileName);
            }
            catch (Exception ex)
            {
                result = false;
                Log.LogError(string.Format("Exception thrown: {0}", ex));
            }

            return result;
        }
示例#9
0
        public void should_create_either_both_empty_or_both_equivalent_and_not_null()
        {
            var map1 = new DependencyMapLoader().LoadFrom(typeof(ISomeService).Assembly);
            var container1 = map1.CreateContainer();
            var service1 = container1.GetInstance<ISomeService>();

            var map2 = new DependencyMap();
            map2.AddService<ISomeService,SomeService>();
            var container2 = map2.CreateContainer();
            var service2 = container2.GetInstance<ISomeService>();

            Assert.IsFalse(service2==null||service1==null,"At least one service is null 1:{0} 2:{1}",service1,service2);
            Assert.AreEqual(service1.GetType(),service2.GetType(),"types are not the same");
        }
示例#10
0
        public void ShouldReturnNullWhenTryingToInstantiateAnIncompleteDependency()
        {
            var loader = new DependencyMapLoader();
            var map = loader.LoadFromBaseDirectory("SampleAssembly.dll");

            var container = map.CreateContainer();
            var result = container.GetInstance<IMissing>();

            Assert.IsNull(result,"The container created an incomplete instance");
        }
示例#11
0
        public void ShouldLoadServicesUsingTheGivenServiceLoaderAndAssemblyLoaderAndServiceResolverInstances()
        {
            var serviceLoader = new Mock<IServiceLoader>();
            var resolver = new Mock<IDefaultServiceResolver>();
            var typeLoader = new Mock<ITypeLoader>();

            var assembly = typeof(IPerson).Assembly;
            var assemblies = new Assembly[] { assembly };
            var serviceList = new List<IServiceInfo>();
            IEnumerable<IServiceInfo> services = serviceList;

            var defaultService = new ServiceInfo(typeof(IVehicle), typeof(Vehicle), "Vehicle");

            serviceList.Add(new ServiceInfo(typeof(IVehicle), typeof(Truck), "Truck"));
            serviceList.Add(defaultService);

            typeLoader.Expect(l => l.LoadTypes(It.IsAny<Assembly>())).Returns(new Type[0]);
            resolver.Expect(r => r.GetDefaultService(It.IsAny<Type>(), It.IsAny<IEnumerable<IServiceInfo>>())).Returns(defaultService);
            serviceLoader.Expect(s => s.Load(assembly)).Returns(services);

            var loader = new DependencyMapLoader(typeLoader.Object, serviceLoader.Object, resolver.Object);
            DependencyMap map = loader.LoadFrom(assemblies);

            typeLoader.VerifyAll();
            resolver.VerifyAll();
            serviceLoader.VerifyAll();

            // Make sure the services are loaded into the dependency map
            Assert.IsTrue(map.Contains(new Dependency(typeof(IVehicle), "Vehicle")));
            Assert.IsTrue(map.Contains(new Dependency(typeof(IVehicle), "Truck")));
            Assert.IsTrue(map.Contains(new Dependency(typeof(IVehicle))));
        }
示例#12
0
        public void ShouldLoadAndCreateContainerFromSingleAssembly()
        {
            var loader = new DependencyMapLoader();

            var map = loader.LoadFrom(typeof(IPerson).Assembly);
            var container = map.CreateContainer();

            Assert.IsNotNull(container);

            var vehicle = container.GetInstance<IVehicle>();
            Assert.IsNotNull(vehicle);
        }