public void Execute_CompositionRootType_IsCreatedAndExecuted()
 {            
     CompositionRootMock compositionRootMock = new CompositionRootMock();
     var serviceContainerMock = new ContainerMock();
     var executor = new CompositionRootExecutor(serviceContainerMock, (t) => compositionRootMock);
     executor.Execute(typeof(CompositionRootMock));
     compositionRootMock.Assert(c => c.Compose(The<IServiceContainer>.IsAnyValue), Invoked.Once);            
 }
 private MockContext<IServiceContainer> GetContainerMock(Func<ILifetime> lifetimeFactory, Func<Type, Type, bool> shouldRegister)
 {            
     var containerMock = new ContainerMock();
     var compositionRootMock = new CompositionRootMock();     
     
     var compositionRootTypeExtractorMock = new TypeExtractorMock();
     compositionRootTypeExtractorMock.Arrange(c => c.Execute(The<Assembly>.IsAnyValue)).Returns(Type.EmptyTypes);
            
     var assemblyScanner = new AssemblyScanner(new ConcreteTypeExtractor(), compositionRootTypeExtractorMock, new CompositionRootExecutor(containerMock,t => compositionRootMock));
     assemblyScanner.Scan(typeof(IFoo).Assembly, containerMock, lifetimeFactory, shouldRegister);
     return containerMock;
 }
        public void GetInstance_UnknownService_ExecutesCompositionRootInSourceAssembly()
        {
            var container = new ServiceContainer();
            var compositionRootMock = new CompositionRootMock();
            compositionRootMock.Arrange(c => c.Compose(container)).Callback<IServiceContainer>(c => c.Register<IFoo, Foo>());

            var compositionRootTypeExtractorMock = new TypeExtractorMock();
            compositionRootTypeExtractorMock.Arrange(c => c.Execute(The<Assembly>.IsAnyValue)).Returns(new[] {typeof(CompositionRootMock)});

            var assemblyScanner = new AssemblyScanner(new ConcreteTypeExtractor(), compositionRootTypeExtractorMock,
                new CompositionRootExecutor(container, t => compositionRootMock), new GenericArgumentMapper());

            container.AssemblyScanner = assemblyScanner;

            container.GetInstance<IFoo>();

            compositionRootMock.Assert(c => c.Compose(container), Invoked.Once);
        }
        public void ScanUsingPredicate_SampleAssemblyWithCompositionRoot_DoesNotCallCompositionRoot()
        {
            var compositionRootMock = new CompositionRootMock();
            var containerMock = new ContainerMock();
            var assemblyScanner = new AssemblyScanner(new ConcreteTypeExtractor(),
                new CompositionRootTypeExtractor(new CompositionRootAttributeExtractor()),
                new CompositionRootExecutor(containerMock, t => compositionRootMock));

            assemblyScanner.Scan(typeof(AssemblyScannerTests).Assembly, containerMock, () => null, (s, t) => true);
            
            compositionRootMock.Assert(c => c.Compose(containerMock), Invoked.Never);
        }
        public void Scan_SampleAssemblyWithCompositionRoot_CallsComposeMethodOnce()
        {
            var compositionRootMock = new CompositionRootMock();
            var containerMock = new ContainerMock();
            var compositionRootExtractorMock = new TypeExtractorMock();
            compositionRootExtractorMock.Arrange(c => c.Execute(The<Assembly>.IsAnyValue)).Returns(new []{typeof(CompositionRootMock)});
            var assemblyScanner = new AssemblyScanner(new ConcreteTypeExtractor(),
                compositionRootExtractorMock,
                new CompositionRootExecutor(containerMock, t => compositionRootMock));
            
            assemblyScanner.Scan(typeof(AssemblyScannerTests).Assembly, containerMock);

            compositionRootMock.Assert(c => c.Compose(containerMock), Invoked.Once);
        }