public void CanRegisterComponentNamedForThreeServices() { //-- arrange IComponentContainerBuilder builderUnderTest = new ComponentContainerBuilder(); var instanceA = new ComponentOne(); var instanceB = new ComponentOne(); //-- act builderUnderTest.RegisterComponentInstance(instanceA).NamedForServices <IServiceOne, ITestComponent, IAnyComponent>("A"); builderUnderTest.RegisterComponentInstance(instanceB).NamedForServices <IServiceOne, ITestComponent, IAnyComponent>("B"); var container = ((IInternalComponentContainerBuilder)builderUnderTest).CreateComponentContainer(isRootContainer: true); var resolvedA1 = container.ResolveNamed <IServiceOne>("A"); var resolvedA2 = container.ResolveNamed <IAnyComponent>("A"); var resolvedA3 = container.ResolveNamed <ITestComponent>("A"); var resolvedB1 = container.ResolveNamed <IServiceOne>("B"); var resolvedB2 = container.ResolveNamed <IAnyComponent>("B"); var resolvedB3 = container.ResolveNamed <ITestComponent>("B"); //-- assert resolvedA1.Should().BeSameAs(instanceA); resolvedA2.Should().BeSameAs(instanceA); resolvedA3.Should().BeSameAs(instanceA); resolvedB1.Should().BeSameAs(instanceB); resolvedB2.Should().BeSameAs(instanceB); resolvedB3.Should().BeSameAs(instanceB); }
public void Merge_ResolveAll_ReturnsAllComponentsRegisteredForService() { //-- arrange var builder1 = new ComponentContainerBuilder(); builder1.RegisterComponentType <ComponentA>().ForService <IAnyComponent>(); var containerUnderTest = builder1.CreateComponentContainer(isRootContainer: true); //-- act var builder2 = new ComponentContainerBuilder(); builder2.RegisterComponentType <ComponentB>().ForService <IAnyComponent>(); containerUnderTest.Merge(builder2); //-- assert var resolved = containerUnderTest.ResolveAll <IAnyComponent>().ToArray(); resolved.Length.Should().Be(2); resolved.OfType <ComponentA>().Count().Should().Be(1); resolved.OfType <ComponentB>().Count().Should().Be(1); }
public void CanRegisterComponentTypeForArrayOfServices() { //-- arrange IComponentContainerBuilder builderUnderTest = new ComponentContainerBuilder(); //-- act builderUnderTest.RegisterComponentType <ComponentOne>().ForServices(typeof(IServiceOne), typeof(IAnyComponent)); //-- assert var container = ((IInternalComponentContainerBuilder)builderUnderTest).CreateComponentContainer(isRootContainer: true); var asService1 = container.Resolve <IServiceOne>(); var asService2 = container.Resolve <IAnyComponent>(); var asSelf = container.Resolve <ComponentOne>(); asService1.Should().NotBeNull(); asService1.Should().BeAssignableTo <ComponentOne>(); asService2.Should().NotBeNull(); asService2.Should().BeAssignableTo <ComponentOne>(); asSelf.Should().NotBeNull(); }
public void CanRegisterComponentNamedForMultipleServicesNonGeneric() { //-- arrange IComponentContainerBuilder builderUnderTest = new ComponentContainerBuilder(); var instanceA = new ComponentOne(); var instanceB = new ComponentOne(); //-- act builderUnderTest.RegisterComponentInstance(instanceA).NamedForServices("A", typeof(IServiceOne), typeof(ITestComponent)); builderUnderTest.RegisterComponentInstance(instanceB).NamedForServices("B", typeof(IServiceOne), typeof(ITestComponent)); var container = ((IInternalComponentContainerBuilder)builderUnderTest).CreateComponentContainer(isRootContainer: true); var resolvedA1 = container.ResolveNamed <IServiceOne>("A"); var resolvedA2 = container.ResolveNamed <ITestComponent>("A"); var resolvedB1 = container.ResolveNamed <IServiceOne>("B"); var resolvedB2 = container.ResolveNamed <ITestComponent>("B"); //-- assert resolvedA1.Should().BeSameAs(instanceA); resolvedA2.Should().BeSameAs(instanceA); resolvedB1.Should().BeSameAs(instanceB); resolvedB2.Should().BeSameAs(instanceB); }
public void CanRegisterComponentNamedForTwoServices() { //-- arrange IComponentContainerBuilder builderUnderTest = new ComponentContainerBuilder(); //-- act builderUnderTest.RegisterComponentType <ComponentOne>().NamedForServices <ITestComponent, IAnyComponent>("A"); builderUnderTest.RegisterComponentType <ComponentTwo>().NamedForServices <ITestComponent, IAnyComponent>("B"); var container = ((IInternalComponentContainerBuilder)builderUnderTest).CreateComponentContainer(isRootContainer: true); var resolved1a = container.ResolveNamed <IAnyComponent>("A"); var resolved1b = container.ResolveNamed <ITestComponent>("A"); var resolved2a = container.ResolveNamed <IAnyComponent>("B"); var resolved2b = container.ResolveNamed <ITestComponent>("B"); //-- assert resolved1a.Should().BeOfType <ComponentOne>(); resolved1b.Should().BeOfType <ComponentOne>(); resolved2a.Should().BeOfType <ComponentTwo>(); resolved2b.Should().BeOfType <ComponentTwo>(); }
public void CanConnectsPortsAndAdapters() { //-- arrange var container = new ComponentContainerBuilder().CreateComponentContainer(isRootContainer: true); var builder = new ComponentContainerBuilder(); var features = new List <IFeatureLoader> { new ExampleDependencyFeatureLoader(), new ExamplePortFeatureLoader(), new ExampleAdapterFeatureLoader(), }; //-- act features.ForEach(f => f.ContributeComponents(container, builder)); container.Merge(builder); var adapterBuilder = new ComponentContainerBuilder(); features.ForEach(f => f.ContributeAdapterComponents(container, adapterBuilder)); container.Merge(adapterBuilder); //-- assert var allAdaptersA = container.ResolveAll <IExampleAdapterA>().ToArray(); var allAdaptersB = container.ResolveAll <IExampleAdapterB>().ToArray(); var allLifecycleListeners = container.ResolveAll <ILifecycleListenerComponent>().ToArray(); allAdaptersA.Select(a => a.QualifiedValue).Should().BeEquivalentTo("DPY_ABC", "DPY_DEF"); allAdaptersB.Select(a => a.QualifiedValue).Should().BeEquivalentTo("DPY_ZZZ"); allLifecycleListeners.OfType <IExampleAdapterA>().Should().BeEquivalentTo(allAdaptersA); allLifecycleListeners.OfType <IExampleAdapterB>().Should().BeEquivalentTo(allAdaptersB); }
public void CanResolveSelf() { //-- arrange var builder = new ComponentContainerBuilder(); var containerUnderTest = builder.CreateComponentContainer(isRootContainer: true); //-- act var container = containerUnderTest.Resolve <IComponentContainer>(); var internalContainer = containerUnderTest.Resolve <IInternalComponentContainer>(); //-- assert container.Should().NotBeNull(); internalContainer.Should().BeSameAs(container); }
public void CanRegisterSingletonComponentType() { //-- arrange IComponentContainerBuilder builderUnderTest = new ComponentContainerBuilder(); //-- act builderUnderTest.RegisterComponentType <ComponentOne>().SingleInstance(); //-- assert var container = ((IInternalComponentContainerBuilder)builderUnderTest).CreateComponentContainer(isRootContainer: true); var resolved1 = container.Resolve <ComponentOne>(); var resolved2 = container.Resolve <ComponentOne>(); resolved2.Should().BeSameAs(resolved1); }
public void CanRegisterComponentInstance() { //-- arrange IComponentContainerBuilder builderUnderTest = new ComponentContainerBuilder(); var componentInstance = new ComponentOne(); //-- act builderUnderTest.RegisterComponentInstance <ComponentOne>(componentInstance); //-- assert var container = ((IInternalComponentContainerBuilder)builderUnderTest).CreateComponentContainer(isRootContainer: true); var resolved = container.Resolve <ComponentOne>(); resolved.Should().NotBeNull(); resolved.Should().BeSameAs(componentInstance); }
public void CanInjectContainerAsDependency() { //-- arrange IComponentContainerBuilder builderUnderTest = new ComponentContainerBuilder(); //-- act builderUnderTest.RegisterComponentType <ComponentFour>(); var container = ((IInternalComponentContainerBuilder)builderUnderTest).CreateComponentContainer(isRootContainer: true); var resolved = container.Resolve <ComponentFour>(); //-- assert resolved.Should().NotBeNull(); resolved.Container.Should().NotBeNull(); resolved.Container.Should().BeSameAs(container); }
public void CanPassConstructorParameterByType() { //-- arrange IComponentContainerBuilder builderUnderTest = new ComponentContainerBuilder(); //-- act builderUnderTest.RegisterComponentType <ComponentOne>().SingleInstance(); builderUnderTest.RegisterComponentType <ComponentThree>().WithParameter <int>(123); //-- assert var container = ((IInternalComponentContainerBuilder)builderUnderTest).CreateComponentContainer(isRootContainer: true); var resolved = container.Resolve <ComponentThree>(); resolved.Should().NotBeNull(); resolved.Number.Should().Be(123); resolved.One.Should().BeSameAs(container.Resolve <ComponentOne>()); }
public void CanRegisterFallbackComponent() { //-- arrange IComponentContainerBuilder builderUnderTest = new ComponentContainerBuilder(); //-- act builderUnderTest.RegisterComponentType <ComponentOne>().ForService <ITestComponent>(); builderUnderTest.RegisterComponentType <ComponentTwo>().ForService <ITestComponent>().AsFallback(); var container = ((IInternalComponentContainerBuilder)builderUnderTest).CreateComponentContainer(isRootContainer: true); var resolved = container.Resolve <ITestComponent>(); //-- assert resolved.Should().NotBeNull(); resolved.Should().BeOfType <ComponentOne>(); }
public void CanRegisterComponentTypeNonGeneric() { //-- arrange IComponentContainerBuilder builderUnderTest = new ComponentContainerBuilder(); //-- act builderUnderTest.RegisterComponentType(typeof(ComponentOne)) .SingleInstance() .ForService <IServiceOne>(); //-- assert var container = ((IInternalComponentContainerBuilder)builderUnderTest).CreateComponentContainer(isRootContainer: true); var asService = container.Resolve <IServiceOne>(); var asSelf = container.Resolve <ComponentOne>(); asSelf.Should().NotBeNull(); asService.Should().BeSameAs(asSelf); }
public void CanResolveAll() { //-- arrange var builder = new ComponentContainerBuilder(); builder.RegisterComponentType <ComponentA>().ForService <IAnyComponent>(); builder.RegisterComponentType <ComponentB>().ForService <IAnyComponent>(); var containerUnderTest = builder.CreateComponentContainer(isRootContainer: true); //-- act var resolved = containerUnderTest.ResolveAll <IAnyComponent>().ToArray(); //-- assert resolved.Length.Should().Be(2); resolved.OfType <ComponentA>().Count().Should().Be(1); resolved.OfType <ComponentB>().Count().Should().Be(1); }
public void CanRegisterComponentInstanceForServices() { //-- arrange IComponentContainerBuilder builderUnderTest = new ComponentContainerBuilder(); var componentInstance = new ComponentOne(); //-- act builderUnderTest.RegisterComponentInstance <ComponentOne>(componentInstance).ForServices <IServiceOne, IAnyComponent>(); //-- assert var container = ((IInternalComponentContainerBuilder)builderUnderTest).CreateComponentContainer(isRootContainer: true); var asService1 = container.Resolve <IServiceOne>(); var asService2 = container.Resolve <IAnyComponent>(); var asSelf = container.Resolve <ComponentOne>(); asService1.Should().BeSameAs(componentInstance); asService2.Should().BeSameAs(componentInstance); asSelf.Should().BeSameAs(componentInstance); }
public void Merge_Resolve_ReturnsLastComponentRegisteredForService() { //-- arrange var builder1 = new ComponentContainerBuilder(); builder1.RegisterComponentType <ComponentA>().ForService <IAnyComponent>(); var containerUnderTest = builder1.CreateComponentContainer(isRootContainer: true); //-- act var builder2 = new ComponentContainerBuilder(); builder2.RegisterComponentType <ComponentB>().ForService <IAnyComponent>(); containerUnderTest.Merge(builder2); //-- assert var resolved = containerUnderTest.Resolve <IAnyComponent>(); resolved.Should().NotBeNull(); resolved.Should().BeAssignableTo <ComponentB>(); }
public void CanRegisterTransientComponentType() { //-- arrange IComponentContainerBuilder builderUnderTest = new ComponentContainerBuilder(); //-- act builderUnderTest.RegisterComponentType <ComponentOne>(); // no need to specify - default is InstancePerDependency builderUnderTest.RegisterComponentType <ComponentTwo>().InstancePerDependency(); //-- assert var container = ((IInternalComponentContainerBuilder)builderUnderTest).CreateComponentContainer(isRootContainer: true); var one1 = container.Resolve <ComponentOne>(); var one2 = container.Resolve <ComponentOne>(); var two1 = container.Resolve <ComponentTwo>(); var two2 = container.Resolve <ComponentTwo>(); one2.Should().NotBeSameAs(one1); two2.Should().NotBeSameAs(two1); }