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"); }
void ICompositionContainer <TModule> .Compose() { var assemblies = SafeAssemblyLoader.LoadAssembliesFromNames(DiscoverAssemblyNames()); ICompositionContainer <TModule> innerContainer = new SimpleCompositionContainer <TModule>( assemblies, _compositionModuleCreationStrategy); innerContainer.Compose(); Modules = innerContainer.Modules; }
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; }