Exemple #1
0
        /// <summary>
        ///     Initializes the loader using the default values.
        /// </summary>
        public Loader()
        {
            _containerLoader = this.CreateDefaultContainerLoader();

            // Load everything else into the container
            var hostAssembly = typeof(Loader).Assembly;

            QueuedActions.Add(container => container.LoadFrom(hostAssembly));

            // Make sure that the plugins are only added once
            if (!Plugins.HasElementWith(p => p is AutoPropertyInjector))
            {
                Plugins.Add(new AutoPropertyInjector());
            }

            if (!Plugins.HasElementWith(p => p is AutoMethodInjector))
            {
                Plugins.Add(new AutoMethodInjector());
            }

            if (!Plugins.HasElementWith(p => p is AutoFieldInjector))
            {
                Plugins.Add(new AutoFieldInjector());
            }

            // Add the initializer to the end of
            // the instantiation pipeline
            if (!Plugins.HasElementWith(p => p is InitializerPlugin))
            {
                Plugins.Add(new InitializerPlugin());
            }

            FileLoaders.Add(_containerLoader);
        }
        public void AssemblyContainerLoaderShouldCallTypeLoader()
        {
            // HACK: The Cut&Paste is ugly, but it works
            var containerLoader = new AssemblyContainerLoader();
            var filename        = "input.dll";

            var targetAssembly = typeof(SampleClass).Assembly;

            // Make sure that it calls the assembly loader
            _mockAssemblyLoader.Expect(loader => loader.Load(filename)).Returns(targetAssembly);

            // It must call the Type Extractor
            _mockTypeExtractor.Expect(extractor => extractor.GetTypes(targetAssembly))
            .Returns(new[] { typeof(SampleClass) });

            // Make sure that it calls the type loaders
            _mockTypeLoader.Expect(loader => loader.CanLoad(typeof(SampleClass))).Returns(true);
            _mockTypeLoader.Expect(loader => loader.Load(typeof(SampleClass)))
            .Returns(new Action <IServiceContainer> [0]);

            var assemblyActionLoader = new AssemblyActionLoader <IServiceContainer>(() => containerLoader.TypeLoaders);

            assemblyActionLoader.TypeExtractor = _mockTypeExtractor.Object;

            containerLoader.AssemblyLoader       = _mockAssemblyLoader.Object;
            containerLoader.AssemblyActionLoader = assemblyActionLoader;

            // The container loader should call the type loader
            // once the load method is called
            containerLoader.TypeLoaders.Add(_mockTypeLoader.Object);

            containerLoader.Load(filename);
        }
        public void AssemblyContainerLoaderShouldCallTypeLoader()
        {
            // HACK: The Cut&Paste is ugly, but it works
            var containerLoader = new AssemblyContainerLoader();
            string filename = "input.dll";

            Assembly targetAssembly = typeof(SampleClass).Assembly;

            // Make sure that it calls the assembly loader
            _mockAssemblyLoader.Expect(loader => loader.Load(filename)).Returns(targetAssembly);

            // It must call the Type Extractor
            _mockTypeExtractor.Expect(extractor => extractor.GetTypes(targetAssembly))
                .Returns(new[] { typeof(SampleClass) });

            // Make sure that it calls the type loaders
            _mockTypeLoader.Expect(loader => loader.CanLoad(typeof(SampleClass))).Returns(true);
            _mockTypeLoader.Expect(loader => loader.Load(typeof(SampleClass)))
                .Returns(new Action<IServiceContainer>[0]);

            var assemblyActionLoader = new AssemblyActionLoader<IServiceContainer>(() => containerLoader.TypeLoaders);
            assemblyActionLoader.TypeExtractor = _mockTypeExtractor.Object;

            containerLoader.AssemblyLoader = _mockAssemblyLoader.Object;
            containerLoader.AssemblyActionLoader = assemblyActionLoader;

            // The container loader should call the type loader
            // once the load method is called
            containerLoader.TypeLoaders.Add(_mockTypeLoader.Object);

            containerLoader.Load(filename);
        }
        public void AssemblyContainerLoaderShouldCallAssemblyLoader()
        {
            var containerLoader = new AssemblyContainerLoader();

            // The container loader should use the assembly loader
            // to load the assembly
            var filename = "input.dll";

            _mockAssemblyLoader.Expect(loader => loader.Load(filename)).Returns(typeof(SampleClass).Assembly);

            containerLoader.AssemblyLoader = _mockAssemblyLoader.Object;
            containerLoader.Load(filename);
        }
        public void AssemblyContainerLoaderShouldCallAssemblyLoader()
        {
            var containerLoader = new AssemblyContainerLoader();

            // The container loader should use the assembly loader
            // to load the assembly
            string filename = "input.dll";

            _mockAssemblyLoader.Expect(loader => loader.Load(filename)).Returns(typeof(SampleClass).Assembly);

            containerLoader.AssemblyLoader = _mockAssemblyLoader.Object;
            containerLoader.Load(filename);
        }
        public void AssemblyContainerLoaderShouldOnlyLoadDllFiles()
        {
            var mockTypeLoader  = new Mock <ITypeLoader>();
            var containerLoader = new AssemblyContainerLoader();

            containerLoader.TypeLoaders.Add(mockTypeLoader.Object);

            // This should return true
            var validFile = typeof(AssemblyContainerLoaderTests).Assembly.Location;

            Assert.True(containerLoader.CanLoad(validFile));

            // This should return false;
            var invalidFile = "input.txt";

            Assert.False(containerLoader.CanLoad(invalidFile));
        }
        public void AssemblyContainerLoaderShouldCallTypeExtractor()
        {
            var containerLoader = new AssemblyContainerLoader();
            string filename = "input.dll";

            Assembly targetAssembly = typeof(SampleClass).Assembly;

            // Make sure that it calls the assembly loader
            _mockAssemblyLoader.Expect(loader => loader.Load(filename)).Returns(targetAssembly);

            // It must call the Type Extractor
            _mockTypeExtractor.Expect(extractor => extractor.GetTypes(targetAssembly))
                .Returns(new[] { typeof(SampleClass) });

            var assemblyActionLoader = new AssemblyActionLoader<IServiceContainer>(() => containerLoader.TypeLoaders);
            assemblyActionLoader.TypeExtractor = _mockTypeExtractor.Object;

            containerLoader.AssemblyLoader = _mockAssemblyLoader.Object;
            containerLoader.AssemblyActionLoader = assemblyActionLoader;
            containerLoader.Load(filename);
        }
        public void AssemblyContainerLoaderShouldCallTypeExtractor()
        {
            var containerLoader = new AssemblyContainerLoader();
            var filename        = "input.dll";

            var targetAssembly = typeof(SampleClass).Assembly;

            // Make sure that it calls the assembly loader
            _mockAssemblyLoader.Expect(loader => loader.Load(filename)).Returns(targetAssembly);

            // It must call the Type Extractor
            _mockTypeExtractor.Expect(extractor => extractor.GetTypes(targetAssembly))
            .Returns(new[] { typeof(SampleClass) });


            var assemblyActionLoader = new AssemblyActionLoader <IServiceContainer>(() => containerLoader.TypeLoaders);

            assemblyActionLoader.TypeExtractor = _mockTypeExtractor.Object;

            containerLoader.AssemblyLoader       = _mockAssemblyLoader.Object;
            containerLoader.AssemblyActionLoader = assemblyActionLoader;
            containerLoader.Load(filename);
        }
        public void AssemblyContainerLoaderShouldOnlyLoadDllFiles()
        {
            var mockTypeLoader = new Mock<ITypeLoader>();
            var containerLoader = new AssemblyContainerLoader();
            containerLoader.TypeLoaders.Add(mockTypeLoader.Object);

            // This should return true
            string validFile = typeof(AssemblyContainerLoaderTests).Assembly.Location;
            Assert.IsTrue(containerLoader.CanLoad(validFile));

            // This should return false;
            string invalidFile = "input.txt";
            Assert.IsFalse(containerLoader.CanLoad(invalidFile));
        }