Esempio n. 1
0
        /// <summary>
        /// Gets the component instance. Only one instance is created of the type
        /// </summary>
        /// <returns>a component instance</returns>
        /// <exception cref="PicoContainer.PicoInitializationException">if the component could not be instantiated.</exception>

        /*public override object ComponentInstance
         *      {
         *              get
         *              {
         *                      if (instanceReference.Get() == null)
         *                      {
         *                              instanceReference.Set(base.ComponentInstance);
         *                      }
         *                      return instanceReference.Get();
         *              }
         *
         *      }*/
        public override object GetComponentInstance(IPicoContainer container)
        {
            if (instanceReference.Get() == null)
            {
                instanceReference.Set(base.GetComponentInstance(container));
            }
            return(instanceReference.Get());
        }
		public void BuildContainer(IObjectReference containerRef,
		                           IObjectReference parentContainerRef,
		                           Object assemblyScope)
		{
			IMutablePicoContainer parent = parentContainerRef == null ? null : parentContainerRef.Get() as IMutablePicoContainer;
			IMutablePicoContainer container = CreateContainer(parent, assemblyScope);

			// register the child in the parent so that lifecycle can be propagated down the hierarchy
			if (parent != null)
			{
				parent.UnregisterComponentByInstance(container);
				parent.RegisterComponentInstance(container, container);
			}

			ComposeContainer(container, assemblyScope);
			container.Start();

			containerRef.Set(container);

		}
		public void KillContainer(IObjectReference containerRef)
		{
			IMutablePicoContainer pico = containerRef == null ? null : containerRef.Get() as IMutablePicoContainer;

			try
			{
				if (pico != null)
				{
					pico.Stop();
					pico.Dispose();

					IMutablePicoContainer parent = pico.Parent as IMutablePicoContainer;
					if (parent != null)
					{
						parent.UnregisterComponentByInstance(pico);
					}
				}
			}
			finally
			{
				pico = null;
			}
		}
		private IMutablePicoContainer GetInstanceFromReference(IObjectReference objectReference)
		{
			return objectReference == null ? null : objectReference.Get() as IMutablePicoContainer;
		}