示例#1
0
        public void Compose_OneModuleCantBeLoaded_ModuleLoadingExceptionWithOneModuleInfoIsThrown()
        {
            var assemblies = new [] { Assembly.GetExecutingAssembly() };
            var stubTypeInfoExtractionService = A.Fake <ITypeInfoExtractionService>();
            var firstType  = string.Empty.GetType().GetTypeInfo();
            var secondType = default(int).GetType().GetTypeInfo();
            var types      = new[] { firstType, secondType };

            A.CallTo(() => stubTypeInfoExtractionService.GetTypes(A <Assembly> ._)).Returns(types);
            A.CallTo(() => stubTypeInfoExtractionService.IsCompositionModule(firstType, typeof(ICompositionModule)))
            .Returns(true);
            A.CallTo(() => stubTypeInfoExtractionService.IsCompositionModule(secondType, typeof(ICompositionModule)))
            .Returns(true);
            var stubCompositionModuleCreationStrategy = A.Fake <ICompositionModuleCreationStrategy>();

            A.CallTo(() => stubCompositionModuleCreationStrategy.CreateCompositionModule(firstType.AsType()))
            .Returns(A.Fake <ICompositionModule>());
            A.CallTo(() => stubCompositionModuleCreationStrategy.CreateCompositionModule(secondType.AsType()))
            .Throws <Exception>();

            var container = new SimpleCompositionContainer <ICompositionModule>(assemblies,
                                                                                stubTypeInfoExtractionService, stubCompositionModuleCreationStrategy);
            var exception = Record.Exception(() => container.Compose());

            exception.Should().BeOfType <AggregateAssemblyInspectionException>().Which.InnerExceptions[0].Message.Should()
            .Be("Unable to create composition modules");
            var moduleCreationException = exception.As <AggregateAssemblyInspectionException>().InnerExceptions[0]
                                          .As <AggregateModuleCreationException>().InnerExceptions[0];

            moduleCreationException.Type.Should().Be(secondType);
            moduleCreationException.Message.Should()
            .Be("Unable to create module for the specified type");
        }
示例#2
0
        void ICompositionContainer <TModule> .Compose()
        {
            var assemblies = SafeAssemblyLoader.LoadAssembliesFromNames(DiscoverAssemblyNames());

            ICompositionContainer <TModule> innerContainer = new SimpleCompositionContainer <TModule>(
                assemblies,
                _compositionModuleCreationStrategy);

            innerContainer.Compose();
            Modules = innerContainer.Modules;
        }
示例#3
0
        public void Compose_CantGetAssemblyDefinedTypes_AssemblyExceptionIsThrown()
        {
            var assemblies = new[] { Assembly.GetExecutingAssembly() };
            var stubTypeInfoExtractionService = A.Fake <ITypeInfoExtractionService>();

            A.CallTo(() => stubTypeInfoExtractionService.GetTypes(A <Assembly> ._)).Throws <Exception>();

            var container = new SimpleCompositionContainer <ICompositionModule>(assemblies,
                                                                                stubTypeInfoExtractionService, null);
            var exception = Record.Exception(() => container.Compose());

            exception.Should().BeOfType <AggregateAssemblyInspectionException>().Which.InnerExceptions[0].Message.Should()
            .Be("Unable to load defined types");
        }
        void ICompositionContainer <TModule> .Compose()
        {
            var assemblies = _assemblyLoadingStrategy.Load();

            ICompositionContainer <TModule> innerContainer = new SimpleCompositionContainer <TModule>(
                assemblies,
                //TODO: Consider replacing with dependency injection for improved testability
                new TypeInfoExtractionService(),
                _compositionModuleCreationStrategy);

            try
            {
                innerContainer.Compose();
            }
            catch
            {
                Modules = innerContainer.Modules;
                throw;
            }
            Modules = innerContainer.Modules;
        }