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)));
            }
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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");
        }
Esempio n. 7
0
        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)
			{
			}
		}