protected virtual IPicoContainer WrapComponentInstances(Type decoratingComponentAdapterClass, IPicoContainer picoContainer, object[] wrapperDependencies) { Assert.IsTrue(typeof (DecoratingComponentAdapter).IsAssignableFrom(decoratingComponentAdapterClass)); IMutablePicoContainer mutablePicoContainer = new DefaultPicoContainer(); int size = (wrapperDependencies != null ? wrapperDependencies.Length : 0) + 1; ICollection allComponentAdapters = picoContainer.ComponentAdapters; foreach (object adapter in allComponentAdapters) { IParameter[] parameters = new IParameter[size]; parameters[0] = new ConstantParameter(adapter); for (int i = 1; i < parameters.Length; i++) { parameters[i] = new ConstantParameter(wrapperDependencies[i - 1]); } IMutablePicoContainer instantiatingPicoContainer = new DefaultPicoContainer(new ConstructorInjectionComponentAdapterFactory()); instantiatingPicoContainer.RegisterComponentImplementation("decorator", decoratingComponentAdapterClass, parameters); mutablePicoContainer.RegisterComponent( (IComponentAdapter) instantiatingPicoContainer.GetComponentInstance("decorator")); } return mutablePicoContainer; }
public void DefaultPicoContainerReturnsNewInstanceForEachCallWhenUsingTransientIComponentAdapter() { DefaultPicoContainer picoContainer = new DefaultPicoContainer(); picoContainer.RegisterComponentImplementation(typeof (Service)); picoContainer.RegisterComponent(new ConstructorInjectionComponentAdapter(typeof (TransientComponent), typeof (TransientComponent))); TransientComponent c1 = (TransientComponent) picoContainer.GetComponentInstance(typeof (TransientComponent)); TransientComponent c2 = (TransientComponent) picoContainer.GetComponentInstance(typeof (TransientComponent)); Assert.IsFalse(c1.Equals(c2)); Assert.AreSame(c1.service, c2.service); }
public void HybridBeans() { SetterInjectionComponentAdapter bAdapter = new SetterInjectionComponentAdapter("b", typeof(B)); SetterInjectionComponentAdapter cAdapter = new SetterInjectionComponentAdapter("c", typeof(C)); SetterInjectionComponentAdapter cNullAdapter = new SetterInjectionComponentAdapter("c0", typeof(C)); IMutablePicoContainer pico = new DefaultPicoContainer(); pico.RegisterComponent(bAdapter); pico.RegisterComponent(cAdapter); pico.RegisterComponent(cNullAdapter); pico.RegisterComponentImplementation(typeof(ArrayList)); C c = (C)cAdapter.GetComponentInstance(pico); Assert.IsTrue(c.instantiatedAsBean()); C c0 = (C)cNullAdapter.GetComponentInstance(pico); Assert.IsTrue(c0.instantiatedAsBean()); }
public void AllUnsatisfiableDependenciesAreSignalled() { SetterInjectionComponentAdapter aAdapter = new SetterInjectionComponentAdapter("a", typeof(A)); SetterInjectionComponentAdapter bAdapter = new SetterInjectionComponentAdapter("b", typeof(B)); IMutablePicoContainer pico = new DefaultPicoContainer(); pico.RegisterComponent(bAdapter); pico.RegisterComponent(aAdapter); try { aAdapter.GetComponentInstance(pico); } catch (UnsatisfiableDependenciesException e) { Assert.IsTrue(e.UnsatisfiableDependencies.Contains(typeof(IList))); Assert.IsTrue(e.UnsatisfiableDependencies.Contains(typeof(string))); } }
public void DefaultPicoContainerReturnsNewInstanceForEachCallWhenUsingTransientIComponentAdapter() { DefaultPicoContainer picoContainer = new DefaultPicoContainer(); picoContainer.RegisterComponentImplementation(typeof(Service)); picoContainer.RegisterComponent(new ConstructorInjectionComponentAdapter(typeof(TransientComponent))); TransientComponent c1 = (TransientComponent)picoContainer.GetComponentInstance(typeof(TransientComponent)); TransientComponent c2 = (TransientComponent)picoContainer.GetComponentInstance(typeof(TransientComponent)); Assert.IsFalse(c1.Equals(c2)); Assert.AreSame(c1.service, c2.service); }
public void CanInstantiateReplacedComponent() { IComponentAdapter componentAdapter = CreateComponentAdapter(); picoContainer.RegisterComponent(componentAdapter); object o = picoContainer.ComponentInstances; picoContainer.UnregisterComponent(typeof(ITouchable)); picoContainer.RegisterComponentImplementation(typeof(ITouchable), typeof(AlternativeTouchable)); Assert.AreEqual(1, picoContainer.ComponentInstances.Count, "Container should container 1 component"); }
public void CollectionsAreGeneratedOnTheFly() { IMutablePicoContainer mpc = new DefaultPicoContainer(); mpc.RegisterComponent(new ConstructorInjectionComponentAdapter(typeof(Bowl))); mpc.RegisterComponentImplementation(typeof(Cod)); Bowl bowl = (Bowl)mpc.GetComponentInstance(typeof(Bowl)); Assert.AreEqual(1, bowl.cods.Length); mpc.RegisterComponentInstance("Nemo", new Cod()); bowl = (Bowl)mpc.GetComponentInstance(typeof(Bowl)); Assert.AreEqual(2, bowl.cods.Length); try { Assert.AreSame(bowl.cods[0], bowl.cods[1]); Assert.Fail("cods should not be the same"); } catch (AssertionException) { } }
public void HybridBeans() { SetterInjectionComponentAdapter bAdapter = new SetterInjectionComponentAdapter("b", typeof (B), null); SetterInjectionComponentAdapter cAdapter = new SetterInjectionComponentAdapter("c", typeof (C), null); SetterInjectionComponentAdapter cNullAdapter = new SetterInjectionComponentAdapter("c0", typeof (C), null); IMutablePicoContainer pico = new DefaultPicoContainer(); pico.RegisterComponent(bAdapter); pico.RegisterComponent(cAdapter); pico.RegisterComponent(cNullAdapter); pico.RegisterComponentImplementation(typeof (ArrayList)); C c = (C) cAdapter.GetComponentInstance(pico); Assert.IsTrue(c.instantiatedAsBean()); C c0 = (C) cNullAdapter.GetComponentInstance(pico); Assert.IsTrue(c0.instantiatedAsBean()); }
public void AllUnsatisfiableDependenciesAreSignalled() { SetterInjectionComponentAdapter aAdapter = new SetterInjectionComponentAdapter("a", typeof (A), null); SetterInjectionComponentAdapter bAdapter = new SetterInjectionComponentAdapter("b", typeof (B), null); IMutablePicoContainer pico = new DefaultPicoContainer(); pico.RegisterComponent(bAdapter); pico.RegisterComponent(aAdapter); try { aAdapter.GetComponentInstance(pico); } catch (UnsatisfiableDependenciesException e) { Assert.IsTrue(e.UnsatisfiableDependencies.Contains(typeof (IList))); Assert.IsTrue(e.UnsatisfiableDependencies.Contains(typeof (string))); } }
public void CollectionsAreGeneratedOnTheFly() { IMutablePicoContainer mpc = new DefaultPicoContainer(); mpc.RegisterComponent(new ConstructorInjectionComponentAdapter(typeof (Bowl), typeof (Bowl))); mpc.RegisterComponentImplementation(typeof (Cod)); Bowl bowl = (Bowl) mpc.GetComponentInstance(typeof (Bowl)); Assert.AreEqual(1, bowl.cods.Length); mpc.RegisterComponentInstance("Nemo", new Cod()); bowl = (Bowl) mpc.GetComponentInstance(typeof (Bowl)); Assert.AreEqual(2, bowl.cods.Length); try { Assert.AreSame(bowl.cods[0], bowl.cods[1]); Assert.Fail("cods should not be the same"); } catch (AssertionException) { } }