public void GetInstance_ResolvingAnInstanceTwice_CallsTheInterceptorDelegateTwice() { // Arrange var resolvedInstances = new InstanceInitializationDataCollection(); var container = new Container(); container.Options.RegisterResolveInterceptor(resolvedInstances.Intercept, Always); // Act container.GetInstance <Container>(); container.GetInstance <Container>(); // Assert Assert.AreEqual(2, resolvedInstances.Count, resolvedInstances.ToString()); }
public void GetInstance_ThreeResolveInterceptorsRegistered_FlowsInstanceCorrectlyThroughInterceptors() { // Arrange var resolvedInstances = new InstanceInitializationDataCollection(); var container = new Container(); container.Options.RegisterResolveInterceptor(resolvedInstances.Intercept, Always); container.Options.RegisterResolveInterceptor(resolvedInstances.Intercept, Always); container.Options.RegisterResolveInterceptor(resolvedInstances.Intercept, Always); // Act container.GetInstance <Container>(); // Assert Assert.AreSame(container, resolvedInstances.Last().Instance); }
public void GetInstance_ThreeResolveInterceptorsRegistered_CallsAllThreeInterceptors() { // Arrange var resolvedInstances = new InstanceInitializationDataCollection(); var container = new Container(); container.Options.RegisterResolveInterceptor(resolvedInstances.Intercept, Always); container.Options.RegisterResolveInterceptor(resolvedInstances.Intercept, Always); container.Options.RegisterResolveInterceptor(resolvedInstances.Intercept, Always); // Act container.GetInstance <Container>(); // Assert Assert.AreEqual(3, resolvedInstances.Count, resolvedInstances.ToString()); }
public void InstanceProducerGetInstance_ResolvingAnInstance_CallsTheInterceptorWithADeletateThatReturnsTheExpectedInstance() { // Arrange var resolvedInstances = new InstanceInitializationDataCollection(); var container = new Container(); container.Options.RegisterResolveInterceptor(resolvedInstances.Intercept, Always); // Act container.GetRegistration(typeof(Container)).GetInstance(); object actualInstance = resolvedInstances.Single().Instance; // Assert AssertThat.IsInstanceOfType(typeof(Container), actualInstance, resolvedInstances.ToString()); }
public void GetInstance_ResolvingAnInstance_CallsTheInterceptorWithTheExpectedInitializationContext() { // Arrange var resolvedInstances = new InstanceInitializationDataCollection(); var container = new Container(); container.Options.RegisterResolveInterceptor(resolvedInstances.Intercept, Always); // Act container.GetInstance <Container>(); InitializationContext actualContext = resolvedInstances.First().Context; // Assert Assert.AreSame(Lifestyle.Singleton, actualContext.Registration.Lifestyle, resolvedInstances.ToString()); Assert.AreEqual(typeof(Container), actualContext.Registration.ImplementationType, resolvedInstances.ToString()); }
public void ContainerGetInstance_ResolvingAnInstanceWithDependencies_OnlyCallsTheDelegateForThisRootInstance() { // Arrange var resolvedInstances = new InstanceInitializationDataCollection(); var container = new Container(); container.Options.RegisterResolveInterceptor(resolvedInstances.Intercept, Always); // Act container.GetInstance <Dep1>(); object actualInstance = resolvedInstances.First().Instance; // Assert AssertThat.IsInstanceOfType(typeof(Dep1), actualInstance, resolvedInstances.ToString()); Assert.AreEqual(1, resolvedInstances.Count, resolvedInstances.ToString()); }
public void GetInstance_ThreeResolveInterceptorsRegisteredWithTwoPredicateFalse_AppliesTheCorrectInterceptor() { // Arrange string expected = "B"; string actual = string.Empty; var resolvedInstances = new InstanceInitializationDataCollection(); var container = new Container(); container.Options.RegisterResolveInterceptor(new Interceptor(() => actual += "A").Intercept, c => false); container.Options.RegisterResolveInterceptor(new Interceptor(() => actual += "B").Intercept, Always); container.Options.RegisterResolveInterceptor(new Interceptor(() => actual += "C").Intercept, c => false); // Act container.GetInstance <Container>(); // Assert Assert.AreEqual(expected, actual); }
public void GetInstance_ThreeResolveInterceptorsRegistered_InterceptorsAreWrappedInOrderOfRegistration() { // Arrange string expectedOrder = "CBA"; string actualOrder = string.Empty; var resolvedInstances = new InstanceInitializationDataCollection(); var container = new Container(); container.Options.RegisterResolveInterceptor(new Interceptor(() => actualOrder += "A").Intercept, Always); container.Options.RegisterResolveInterceptor(new Interceptor(() => actualOrder += "B").Intercept, Always); container.Options.RegisterResolveInterceptor(new Interceptor(() => actualOrder += "C").Intercept, Always); // Act container.GetInstance <Container>(); // Assert Assert.AreEqual(expectedOrder, actualOrder); }