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))); }
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); }
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 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); }
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); }
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")); }
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")); }
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()); }
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))); }
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); }
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; }