Ejemplo n.º 1
0
        public void Scan_SampleAssembly_ConfiguresAccordingToPredicate()
        {
            var container = new ServiceContainer();
            var compositionRootExtractorMock = new TypeExtractorMock();
            compositionRootExtractorMock.Arrange(c => c.Execute(The<Assembly>.IsAnyValue)).Returns(Type.EmptyTypes);
            container.CompositionRootTypeExtractor = compositionRootExtractorMock;
            container.RegisterAssembly(typeof(AssemblyScannerTests).Assembly, (s,i) => s == typeof(IFoo));

            Assert.True(container.AvailableServices.Any(sr => sr.ServiceType == typeof(IFoo)));
            Assert.False(container.AvailableServices.Any(sr => sr.ServiceType == typeof(IBar)));
        }
Ejemplo n.º 2
0
        public void Register_Assembly_CallsAssemblyScanner()
        {
            var scannerMock = new AssemblyScannerMock();
            var compositionRootExtractorMock = new TypeExtractorMock();
            compositionRootExtractorMock.Arrange(c => c.Execute(The<Assembly>.IsAnyValue)).Returns(Type.EmptyTypes);

            var serviceContainer = new ServiceContainer();
            serviceContainer.CompositionRootTypeExtractor = compositionRootExtractorMock;
            serviceContainer.AssemblyScanner = scannerMock;
            serviceContainer.RegisterAssembly(typeof(IFoo).Assembly);
            scannerMock.Assert(a => a.Scan(typeof(IFoo).Assembly, The<IServiceRegistry>.IsAnyValue, The<Func<ILifetime>>.IsAnyValue, The<Func<Type, Type, bool>>.IsAnyValue), Invoked.Once);
        }
Ejemplo n.º 3
0
 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);
        }
Ejemplo n.º 5
0
        public void RegisterAssembly_uses_DefaultLifetime_if_set()
        {
            var container = (ServiceContainer)CreateContainer();
            container.SetDefaultLifetime<PerContainerLifetime>();
            var compositionRootExtractorMock = new TypeExtractorMock();
            compositionRootExtractorMock.Arrange(m => m.Execute(The<Assembly>.IsAnyValue)).Returns(new Type[] {});
            container.CompositionRootTypeExtractor = compositionRootExtractorMock;
                       
            container.RegisterAssembly(typeof(Foo).Assembly);

            var foo1 = container.GetInstance<IFoo>();
            var foo2 = container.GetInstance<IFoo>();

            Assert.Same(foo1, foo2);
        }
Ejemplo n.º 6
0
        public void Scan_AssemblyFileWithCompositionRoot_CallsScanMethodMethod()
        {
            var container = new ServiceContainer();
            var compositionRootTypeExtractorMock = new TypeExtractorMock();
            compositionRootTypeExtractorMock.Arrange(t => t.Execute(The<Assembly>.IsAnyValue)).Returns(new [] {typeof(CompositionRootMock)});
            container.CompositionRootTypeExtractor = compositionRootTypeExtractorMock;
            var assemblyScannerMock = new AssemblyScannerMock();
            container.AssemblyScanner = assemblyScannerMock;

            container.RegisterAssembly("LightInject.Tests.dll");
            assemblyScannerMock.Assert(a => a.Scan(The<Assembly>.IsAnyValue, container), Invoked.Once);
        }
Ejemplo n.º 7
0
 public void Scan_HostAssembly_DoesNotConfigureInternalServices()
 {
     var container = new ServiceContainer();
     var compositionRootExtractorMock = new TypeExtractorMock();
     compositionRootExtractorMock.Arrange(c => c.Execute(The<Assembly>.IsAnyValue)).Returns(new[] { typeof(CompositionRootMock) });
     container.CompositionRootTypeExtractor = compositionRootExtractorMock;
     container.RegisterAssembly(typeof(ServiceContainer).Assembly);
     var result = container.AvailableServices.Where(si => si.ImplementingType.Namespace == "LightInject");
     Assert.False(container.AvailableServices.Any(si => si.ImplementingType != null && si.ImplementingType.Namespace == "LightInject"));
 }
Ejemplo n.º 8
0
 public void Scan_SampleAssembly_DoesNotRegisterNestedPrivateTypes()
 {
     var container = new ServiceContainer();
     var compositionRootExtractorMock = new TypeExtractorMock();
     compositionRootExtractorMock.Arrange(c => c.Execute(The<Assembly>.IsAnyValue)).Returns(new[] { typeof(CompositionRootMock) });
     container.CompositionRootTypeExtractor = compositionRootExtractorMock;
     container.RegisterAssembly(typeof(Foo).Assembly);
     Assert.False(container.AvailableServices.Any(si => si.ImplementingType.Name == "NestedPrivateBar"));
 }
Ejemplo n.º 9
0
 public void Scan_SampleAssembly_DoesNotRegisterSystemTypes()
 {
     var container = new ServiceContainer();
     var compositionRootExtractorMock = new TypeExtractorMock();
     compositionRootExtractorMock.Arrange(c => c.Execute(The<Assembly>.IsAnyValue)).Returns(new[] { typeof(CompositionRootMock) });
     container.CompositionRootTypeExtractor = compositionRootExtractorMock;
     container.RegisterAssembly(typeof(string).Assembly);
     Assert.Equal(0, container.AvailableServices.Count());
 }
Ejemplo n.º 10
0
 public void Scan_SampleAssembly_DoesNotRegisterCompilerGeneratedTypes()
 {         
     var container = new ServiceContainer();
     var compositionRootExtractorMock = new TypeExtractorMock();
     compositionRootExtractorMock.Arrange(c => c.Execute(The<Assembly>.IsAnyValue)).Returns(new[] { typeof(CompositionRootMock) });
     container.CompositionRootTypeExtractor = compositionRootExtractorMock;
     container.RegisterAssembly(typeof(Foo).Assembly);
     Assert.False(container.AvailableServices.Any(si => si.ImplementingType != null && si.ImplementingType.IsDefined(typeof(CompilerGeneratedAttribute), false)));
 }
Ejemplo n.º 11
0
        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);
        }
Ejemplo n.º 12
0
        private MockContext<IServiceContainer> GetContainerMock(Type type)
        {
            var compositionRootExtractorMock = new TypeExtractorMock();
            compositionRootExtractorMock.Arrange(c => c.Execute(The<Assembly>.IsAnyValue)).Returns(Type.EmptyTypes);
            var concreteTypeExtractorMock = new TypeExtractorMock();
            concreteTypeExtractorMock.Arrange(c => c.Execute(The<Assembly>.IsAnyValue)).Returns(new Type[] { type });
            var scanner = new AssemblyScanner(concreteTypeExtractorMock, compositionRootExtractorMock, null,
                new GenericArgumentMapper());
            var containerMock = new ContainerMock();

            scanner.Scan(typeof(IFoo).Assembly, containerMock, () => null, (st, ip) => true);
            return containerMock;
        }