Author: hammett
Date: Mon Aug 30 14:27:53 2004
New Revision: 37216

Added:
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/IKernelEvents.cs
   
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/KernelEventsTestCase.cs
Removed:
   
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/EventManagerTestCase.cs
   
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/EventSubsystemTestCase.cs
Modified:
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/BaseKernel.cs
   
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/AbstractHandler.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/IKernel.cs
   
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Model/Default/DefaultComponentModel.cs
   
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Model/Default/DefaultComponentModelBuilder.cs
Log:
More refactoring.

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/BaseKernel.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/BaseKernel.cs 
(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/BaseKernel.cs Mon 
Aug 30 14:27:53 2004
@@ -1,271 +1,313 @@
-// Copyright 2004 The Apache Software Foundation
-// 
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-// 
-//     http://www.apache.org/licenses/LICENSE-2.0
-// 
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-namespace Apache.Avalon.Castle.MicroKernel
-{
-       using System;
-       using System.Collections;
-
-       using Apache.Avalon.Castle.MicroKernel.Model;
-       using Apache.Avalon.Castle.MicroKernel.Subsystems.Lookup.Default;
-       using Apache.Avalon.Castle.MicroKernel.Subsystems.Events;
-       using Apache.Avalon.Castle.MicroKernel.Subsystems.Events.Default;
-
-       /// <summary>
-       /// Base implementation of <see cref="IKernel"/>
-       /// </summary>
-       public class BaseKernel : IKernel
-       {
-               protected Hashtable m_components;
-
-               protected Hashtable m_services;
-
-               protected Hashtable m_subsystems;
-
-               protected Hashtable m_dependencyToSatisfy;
-
-               protected IHandlerFactory m_handlerFactory;
-
-               protected IComponentModelBuilder m_componentModelBuilder;
-
-               protected ILifestyleManagerFactory m_lifestyleManagerFactory;
-
-               /// <summary>
-               /// 
-               /// </summary>
-               public BaseKernel()
-               {
-                       m_services = new Hashtable();
-                       m_components = new 
Hashtable(CaseInsensitiveHashCodeProvider.Default, CaseInsensitiveComparer.Default);
-                       m_subsystems = new Hashtable();
-                       m_handlerFactory = new Handler.Default.SimpleHandlerFactory();
-                       m_dependencyToSatisfy = new Hashtable();
-                       m_componentModelBuilder = new 
Model.Default.DefaultComponentModelBuilder( this );
+// Copyright 2004 The Apache Software Foundation

+// 

+// Licensed under the Apache License, Version 2.0 (the "License");

+// you may not use this file except in compliance with the License.

+// You may obtain a copy of the License at

+// 

+//     http://www.apache.org/licenses/LICENSE-2.0

+// 

+// Unless required by applicable law or agreed to in writing, software

+// distributed under the License is distributed on an "AS IS" BASIS,

+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+// See the License for the specific language governing permissions and

+// limitations under the License.

+

+namespace Apache.Avalon.Castle.MicroKernel

+{

+       using System;

+       using System.Collections;

+    using System.ComponentModel;

+

+       using Apache.Avalon.Castle.MicroKernel.Model;

+       using Apache.Avalon.Castle.MicroKernel.Subsystems.Lookup.Default;

+

+       /// <summary>

+       /// Base implementation of <see cref="IKernel"/>

+       /// </summary>

+       public class BaseKernel : IKernel, IDisposable

+       {

+        private static readonly object ComponentAddedEvent = new object();

+        private static readonly object ComponentCreatedEvent = new object();

+        private static readonly object ComponentDestroyedEvent = new object();

+

+        protected EventHandlerList m_events;

+

+        protected IList m_componentsInstances = new ArrayList();

+

+        protected Hashtable m_components;

+

+               protected Hashtable m_services;

+

+               protected Hashtable m_subsystems;

+

+               protected Hashtable m_dependencyToSatisfy;

+

+               protected IHandlerFactory m_handlerFactory;

+

+               protected IComponentModelBuilder m_componentModelBuilder;

+

+               protected ILifestyleManagerFactory m_lifestyleManagerFactory;

+

+               /// <summary>

+               /// 

+               /// </summary>

+               public BaseKernel()

+               {

+            m_events = new EventHandlerList();

+            m_services = new Hashtable();

+                       m_components = new 
Hashtable(CaseInsensitiveHashCodeProvider.Default, CaseInsensitiveComparer.Default);

+                       m_subsystems = new Hashtable();

+                       m_handlerFactory = new Handler.Default.SimpleHandlerFactory();

+                       m_dependencyToSatisfy = new Hashtable();

+                       m_componentModelBuilder = new 
Model.Default.DefaultComponentModelBuilder( this );

                        m_lifestyleManagerFactory = new 
Lifestyle.Default.SimpleLifestyleManagerFactory();

 

                        InitializeSubsystems();

                }

 

-               #region Kernel Members
-
+               #region IKernel Members

+

                /// <summary>

                /// Adds a component to kernel.

                /// </summary>

                /// <param name="key">The unique key that identifies the 
component</param>

                /// <param name="service">The service exposed by this component</param>

                /// <param name="implementation">The actual implementation</param>

-               public void AddComponent( String key, Type service, Type 
implementation )
-               {
-                       AssertUtil.ArgumentNotNull( key, "key" );
-                       AssertUtil.ArgumentNotNull( service, "service" );
-                       AssertUtil.ArgumentNotNull( implementation, "implementation" );
-                       
-                       if (!service.IsInterface)
-                       {
-                               throw new ArgumentException("service must be an 
interface");
-                       }
-                       if (implementation.IsInterface)
-                       {
-                               throw new ArgumentException("implementation can't be 
an interface");
-                       }
-                       if (!service.IsAssignableFrom(implementation))
-                       {
-                               throw new ArgumentException("The specified 
implementation does not implement the service interface");
-                       }
-
-                       IComponentModel model = ModelBuilder.BuildModel( key, service, 
implementation );
-
-                       IHandler handler = HandlerFactory.CreateHandler( model );
-                       handler.Init ( this );
-
-                       m_components[ key ] = handler;
-
-                       OnNewHandler( key, service, implementation, handler );
-               }
-
-               /// <summary>
-               /// Adds a subsystem.
-               /// </summary>
-               /// <param name="key">Name of this subsystem</param>
-               /// <param name="system">Subsystem implementation</param>
-               public void AddSubsystem( String key, IKernelSubsystem system )
-               {
-                       AssertUtil.ArgumentNotNull( key, "key" );
-                       AssertUtil.ArgumentNotNull( system, "system" );
-
-                       system.Init( this );
-
-                       m_subsystems[ key ] = system;
-               }
-
-               /// <summary>
-               /// 
-               /// </summary>
-               public IHandler this [ String key ]
-               {
-                       get
-                       {
-                               return (IHandler) m_components[ key ];
-                       }
-               }
-
-               public IHandler GetHandler( String key, object criteria )
-               {
-                       // TODO: IHandler GetHandler( String key, object criteria )
-                       return null;
-               }
-
-               public IHandlerFactory HandlerFactory
-               {
-                       get
-                       {
-                               return m_handlerFactory;
-                       }
-                       set
-                       {
-                               AssertUtil.ArgumentNotNull( value, "value" );
-                               m_handlerFactory = value;
-                       }
-               }
-
-               /// <summary>
-               /// 
-               /// </summary>
-               public ILifestyleManagerFactory LifestyleManagerFactory
-               {
-                       get
-                       {
-                               return m_lifestyleManagerFactory;
-                       }
-                       set
-                       {
-                               AssertUtil.ArgumentNotNull( value, "value" );
-                               m_lifestyleManagerFactory = value;
-                       }
-               }
-
-               public IComponentModelBuilder ModelBuilder
-               {
-                       get
-                       {
-                               return m_componentModelBuilder;
-                       }
-                       set
-                       {
-                               AssertUtil.ArgumentNotNull( value, "value" );
-                               m_componentModelBuilder = value;
-                       }
-               }
-
-               /// <summary>
-               /// 
-               /// </summary>
-               /// <param name="service"></param>
-               /// <returns></returns>
-               public bool HasService( Type service )
-               {
-                       return m_services.Contains( service );
-               }
-
-               /// <summary>
-               /// 
-               /// </summary>
-               /// <param name="service"></param>
-               /// <param name="depDelegate"></param>
-               public void AddDependencyListener( Type service, 
DependencyListenerDelegate depDelegate )
-               {
-                       lock(m_dependencyToSatisfy)
-                       {
-                               Delegate del = m_dependencyToSatisfy[ service ] as 
Delegate;
-
-                               if (del == null)
-                               {
-                                       m_dependencyToSatisfy[ service ] = depDelegate;
-                               }
-                               else
-                               {
-                                       del = Delegate.Combine( del, depDelegate );
-                                       m_dependencyToSatisfy[ service ] = del;
-                               }
-                       }
-               }
-
-               /// <summary>
-               /// 
-               /// </summary>
-               /// <param name="service"></param>
-               /// <returns></returns>
-               public IHandler GetHandlerForService( Type service )
-               {
-                       return (IHandler) m_services[ service ];
-               }
-
-               /// <summary>
-               /// Returns a registered subsystem;
-               /// </summary>
-               /// <param name="key">Key used when registered subsystem</param>
-               /// <returns>Subsystem implementation</returns>
-               public IKernelSubsystem GetSubsystem( String key )
-               {
-                       return (IKernelSubsystem) m_subsystems[ key ];
-               }
-
-               #endregion
-
+               public void AddComponent( String key, Type service, Type 
implementation )

+               {

+                       AssertUtil.ArgumentNotNull( key, "key" );

+                       AssertUtil.ArgumentNotNull( service, "service" );

+                       AssertUtil.ArgumentNotNull( implementation, "implementation" );

+                       

+                       if (!service.IsInterface)

+                       {

+                               throw new ArgumentException("service must be an 
interface");

+                       }

+                       if (implementation.IsInterface)

+                       {

+                               throw new ArgumentException("implementation can't be 
an interface");

+                       }

+            if (implementation.IsAbstract)

+            {

+                throw new ArgumentException("implementation can't be abstract");

+            }

+            if (!service.IsAssignableFrom(implementation))

+            {

+                               throw new ArgumentException("The specified 
implementation does not implement the service interface");

+                       }

+

+                       IComponentModel model = ModelBuilder.BuildModel( key, service, 
implementation );

+

+                       IHandler handler = HandlerFactory.CreateHandler( model );

+                       handler.Init ( this );

+

+                       m_components[ key ] = handler;

+

+            OnNewHandler( model, key, service, implementation, handler);

+        }

+

+        public event ComponentDataDelegate ComponentAdded

+        {

+            add { m_events.AddHandler(ComponentAddedEvent, value); }

+            remove { m_events.RemoveHandler(ComponentAddedEvent, value); }

+        }

+

+        /// <summary>

+               /// Adds a subsystem.

+               /// </summary>

+               /// <param name="key">Name of this subsystem</param>

+               /// <param name="system">Subsystem implementation</param>

+               public void AddSubsystem( String key, IKernelSubsystem system )

+               {

+                       AssertUtil.ArgumentNotNull( key, "key" );

+                       AssertUtil.ArgumentNotNull( system, "system" );

+

+                       system.Init( this );

+

+                       m_subsystems[ key ] = system;

+               }

+

+               /// <summary>

+               /// 

+               /// </summary>

+               public IHandler this [ String key ]

+               {

+                       get

+                       {

+                               return (IHandler) m_components[ key ];

+                       }

+               }

+

+               public IHandler GetHandler( String key, object criteria )

+               {

+                       // TODO: IHandler GetHandler( String key, object criteria )

+                       return null;

+               }

+

+               public IHandlerFactory HandlerFactory

+               {

+                       get

+                       {

+                               return m_handlerFactory;

+                       }

+                       set

+                       {

+                               AssertUtil.ArgumentNotNull( value, "value" );

+                               m_handlerFactory = value;

+                       }

+               }

+

                /// <summary>

                /// 

                /// </summary>

+               public ILifestyleManagerFactory LifestyleManagerFactory

+               {

+                       get

+                       {

+                               return m_lifestyleManagerFactory;

+                       }

+                       set

+                       {

+                               AssertUtil.ArgumentNotNull( value, "value" );

+                               m_lifestyleManagerFactory = value;

+                       }

+               }

+

+               public IComponentModelBuilder ModelBuilder

+               {

+                       get

+                       {

+                               return m_componentModelBuilder;

+                       }

+                       set

+                       {

+                               AssertUtil.ArgumentNotNull( value, "value" );

+                               m_componentModelBuilder = value;

+                       }

+               }

+

+               /// <summary>

+               /// 

+               /// </summary>

+               /// <param name="service"></param>

+               /// <returns></returns>

+               public bool HasService( Type service )

+               {

+                       return m_services.Contains( service );

+               }

+

+               /// <summary>

+               /// 

+               /// </summary>

+               /// <param name="service"></param>

+               /// <param name="depDelegate"></param>

+               public void AddDependencyListener( Type service, 
DependencyListenerDelegate depDelegate )

+               {

+                       lock(m_dependencyToSatisfy)

+                       {

+                               Delegate del = m_dependencyToSatisfy[ service ] as 
Delegate;

+

+                               if (del == null)

+                               {

+                                       m_dependencyToSatisfy[ service ] = depDelegate;

+                               }

+                               else

+                               {

+                                       del = Delegate.Combine( del, depDelegate );

+                                       m_dependencyToSatisfy[ service ] = del;

+                               }

+                       }

+               }

+

+               /// <summary>

+               /// 

+               /// </summary>

+               /// <param name="service"></param>

+               /// <returns></returns>

+               public IHandler GetHandlerForService( Type service )

+               {

+                       return (IHandler) m_services[ service ];

+               }

+

+               /// <summary>

+               /// Returns a registered subsystem;

+               /// </summary>

+               /// <param name="key">Key used when registered subsystem</param>

+               /// <returns>Subsystem implementation</returns>

+               public IKernelSubsystem GetSubsystem( String key )

+               {

+                       return (IKernelSubsystem) m_subsystems[ key ];

+               }

+

+               #endregion

+

+        #region IDisposable Members

+

+        public void Dispose()

+        {

+            foreach (PairHandlerComponent pair in m_componentsInstances)

+            {

+                pair.Handler.Release(pair.Instance);

+            }

+            m_componentsInstances.Clear();

+        }

+

+        #endregion

+

+        /// <summary>

+        /// 

+               /// </summary>

                protected virtual void InitializeSubsystems()

                {

-                       AddSubsystem( KernelConstants.LOOKUP, new 
LookupCriteriaMatcher() );
-                       AddSubsystem( KernelConstants.EVENTS, new EventManager() );

+            // Examples:

+                       // AddSubsystem( KernelConstants.LOOKUP, new 
LookupCriteriaMatcher() );

+                       // AddSubsystem( KernelConstants.EVENTS, new EventManager() );

                }

-
-               private void OnNewHandler( String key, Type service, Type 
implementation, IHandler handler )
-               {
-                       m_services[ service ] = handler;
-                       
-                       RaiseDependencyEvent( service, handler );
-                       RaiseSubsystemNewComponentEvent( key, service, implementation 
);
-               }
-
-               private void RaiseDependencyEvent( Type service, IHandler handler )
-               {
-                       lock(m_dependencyToSatisfy)
-                       {
-                               if (!m_dependencyToSatisfy.Contains( service ))
-                               {
-                                       return;
-                               }
-
-                               DependencyListenerDelegate del = 
(DependencyListenerDelegate) m_dependencyToSatisfy[ service ];
-                               del( service, handler );
-
-                               m_dependencyToSatisfy.Remove( service );
-                       }
-               }
-
-               private void RaiseSubsystemNewComponentEvent( String key, Type 
service, Type implementation )
-               {
-                       IEventManager eventManager = (IEventManager) GetSubsystem( 
KernelConstants.EVENTS );
-
-                       if (eventManager == null)
-                       {
-                               return;
-                       }
-
-                       eventManager.OnComponentAdded( new EventManagerData( key, 
service, implementation ) );
-               }
-       }
-}
+

+        protected virtual void RaiseComponentAdded(IComponentModel model, String key, 
Type service, Type implementation, IHandler handler)

+        {

+            ComponentDataDelegate eventDelegate = (ComponentDataDelegate) 
m_events[ComponentAddedEvent];

+            

+            if (eventDelegate != null)

+            {

+                eventDelegate(model, key, service, implementation, handler);

+            }

+        }

+

+        private void OnNewHandler( IComponentModel model, String key, Type service, 
Type implementation, IHandler handler )

+               {

+                       m_services[ service ] = handler;

+

+            RaiseComponentAdded( model, key, service, implementation, handler );

+

+            if (model.ActivationPolicy == Apache.Avalon.Framework.Activation.Start)

+            {

+                object instance = handler.Resolve();

+                

+                m_componentsInstances.Add( new PairHandlerComponent(handler, 
instance) );

+            }

+        }

+       }

+

+    internal class PairHandlerComponent

+    {

+        private IHandler m_handler;

+        private object m_instance;

+

+        public PairHandlerComponent( IHandler handler, object instance )

+        {

+            m_handler = handler;

+            m_instance = instance;

+        }

+

+        public IHandler Handler

+        {

+            get { return m_handler; }

+        }

+

+        public object Instance

+        {

+            get { return m_instance; }

+        }

+    }

+}


Modified: 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/AbstractHandler.cs
==============================================================================
--- 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/AbstractHandler.cs
    (original)
+++ 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/AbstractHandler.cs
    Mon Aug 30 14:27:53 2004
@@ -18,7 +18,6 @@
        using System.Collections;
 
        using Apache.Avalon.Castle.MicroKernel.Model;
-       using Apache.Avalon.Castle.MicroKernel.Subsystems.Events;
 
        /// <summary>
        /// Summary description for AbstractHandler.
@@ -108,7 +107,7 @@
 
                protected virtual void RegisterInstance( ref object instance )
                {
-                       RaiseComponentCreatedEvent( ref instance );
+                       // RaiseComponentCreatedEvent( ref instance );
 
                        if (!HasInstance( instance, false ))
                        {
@@ -120,7 +119,7 @@
 
                protected virtual void UnregisterInstance( object instance )
                {
-                       RaiseComponentCreatedEvent( instance );
+                       // RaiseComponentCreatedEvent( instance );
 
                        if (m_instances.Count == 0)
                        {
@@ -154,6 +153,7 @@
                        return false;
                }
 
+        /*
                protected virtual void RaiseComponentCreatedEvent( ref object instance 
)
                {
                        IEventManager eventManager = (IEventManager) 
m_kernel.GetSubsystem( KernelConstants.EVENTS );
@@ -181,5 +181,6 @@
                                eventManager.OnComponentDestroyed( data );
                        }
                }
+        */
        }
 }

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/IKernel.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/IKernel.cs    
(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/IKernel.cs    Mon 
Aug 30 14:27:53 2004
@@ -1,4 +1,4 @@
- // Copyright 2004 The Apache Software Foundation

+// Copyright 2004 The Apache Software Foundation

 // 

 // Licensed under the Apache License, Version 2.0 (the "License");

 // you may not use this file except in compliance with the License.

@@ -18,13 +18,13 @@
 

        using Apache.Avalon.Castle.MicroKernel.Model;

 

-       public delegate void DependencyListenerDelegate(Type service, IHandler 
handler);

+       public delegate void DependencyListenerDelegate( Type service, IHandler 
handler );

 

-       /// <summary>

+    /// <summary>

        /// Defines the Kernel service

        /// </summary>

-       public interface IKernel

-       {

+    public interface IKernel : IKernelEvents

+    {

                /// <summary>

                /// Adds a component to kernel.

                /// </summary>

@@ -33,7 +33,7 @@
                /// <param name="implementation">The actual implementation</param>

                void AddComponent(String key, Type service, Type implementation);

 

-               /// <summary>

+        /// <summary>

                /// IComponentModel instance builder.

                /// </summary>

                IComponentModelBuilder ModelBuilder { get; set; }


Added: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/IKernelEvents.cs
==============================================================================
--- (empty file)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/IKernelEvents.cs     
 Mon Aug 30 14:27:53 2004
@@ -0,0 +1,33 @@
+// Copyright 2004 The Apache Software Foundation

+// 

+// Licensed under the Apache License, Version 2.0 (the "License");

+// you may not use this file except in compliance with the License.

+// You may obtain a copy of the License at

+// 

+//     http://www.apache.org/licenses/LICENSE-2.0

+// 

+// Unless required by applicable law or agreed to in writing, software

+// distributed under the License is distributed on an "AS IS" BASIS,

+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+// See the License for the specific language governing permissions and

+// limitations under the License.

+

+namespace Apache.Avalon.Castle.MicroKernel

+{

+       using System;

+

+       using Apache.Avalon.Castle.MicroKernel.Model;

+

+    public delegate void ComponentDataDelegate( IComponentModel model, String key, 
Type service, Type implementation, IHandler handler );

+

+    /// <summary>

+    /// 

+    /// </summary>

+    public interface IKernelEvents

+    {

+        /// <summary>

+        /// 

+        /// </summary>

+        event ComponentDataDelegate ComponentAdded;

+    }

+}


Added: 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/KernelEventsTestCase.cs
==============================================================================
--- (empty file)
+++ 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/KernelEventsTestCase.cs
       Mon Aug 30 14:27:53 2004
@@ -0,0 +1,102 @@
+// Copyright 2004 The Apache Software Foundation

+// 

+// Licensed under the Apache License, Version 2.0 (the "License");

+// you may not use this file except in compliance with the License.

+// You may obtain a copy of the License at

+// 

+//     http://www.apache.org/licenses/LICENSE-2.0

+// 

+// Unless required by applicable law or agreed to in writing, software

+// distributed under the License is distributed on an "AS IS" BASIS,

+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+// See the License for the specific language governing permissions and

+// limitations under the License.

+

+namespace Apache.Avalon.Castle.MicroKernel.Test

+{

+       using System;

+

+       using NUnit.Framework;

+

+       using Apache.Avalon.Castle.MicroKernel;

+    using Apache.Avalon.Castle.MicroKernel.Model;

+    using Apache.Avalon.Castle.MicroKernel.Test.Components;

+

+       /// <summary>

+    /// Summary description for KernelEventsTestCase.

+    /// </summary>

+       [TestFixture]

+       public class KernelEventsTestCase : Assertion

+       {

+               private bool m_componentAdded = false;

+               private bool m_componentCreated = false;

+               private bool m_componentDestroyed = false;

+

+               [Test]

+               public void TestComponentAddedEvent()

+               {

+                       IKernel kernel = new DefaultAvalonKernel();

+

+            kernel.ComponentAdded += new ComponentDataDelegate(OnComponentAdded);

+

+            kernel.AddComponent( "key", typeof(IMailService), 
typeof(SimpleMailService) );

+

+                       Assert( m_componentAdded );

+               }

+

+        public void OnComponentAdded(IComponentModel model, String key, Type service, 
Type implementation, IHandler handler)

+        {

+                       m_componentAdded = true;

+               }

+

+        /*

+               [Test]

+               public void TestComponentCreatedEvent()

+               {

+                       IKernel kernel = new DefaultAvalonKernel();

+

+            kernel.ComponentCreated += new KernelDelegate(OnComponentCreated);

+

+            kernel.AddComponent( "key", typeof(IMailService), 
typeof(SimpleMailService) );

+

+                       Assert( !m_componentCreated );

+

+                       kernel[ "key" ].Resolve();

+

+                       Assert( m_componentCreated );

+               }

+

+       public void OnComponentCreated( EventManagerData data )

+               {

+                       m_componentCreated = true;

+               }*/

+

+        /*

+               [Test]

+               public void TestComponentDestroyedEvent()

+               {

+                       IKernel kernel = new DefaultAvalonKernel();

+

+                       IEventManager eventManager = (IEventManager) 
kernel.GetSubsystem( KernelConstants.EVENTS );

+                       eventManager.ComponentDestroyed += new 
KernelDelegate(OnComponentDestroyed);

+

+                       kernel.AddComponent( "key", typeof(IMailService), 
typeof(SimpleMailService) );

+

+                       Assert( !m_componentDestroyed );

+

+                       object instance = kernel[ "key" ].Resolve();

+

+                       Assert( !m_componentDestroyed );

+

+                       kernel[ "key" ].Release( instance );

+

+                       Assert( m_componentDestroyed );

+               }

+

+               public void OnComponentDestroyed( EventManagerData data )

+               {

+                       m_componentDestroyed = true;

+               }

+        */

+    }

+}


Modified: 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Model/Default/DefaultComponentModel.cs
==============================================================================
--- 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Model/Default/DefaultComponentModel.cs
        (original)
+++ 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Model/Default/DefaultComponentModel.cs
        Mon Aug 30 14:27:53 2004
@@ -55,35 +55,10 @@
                        m_name = data.Name;

                        m_service = service;

                        m_lifestyle = data.SupportedLifestyle;

-                       m_activation = data.AvalonComponent.Activation;

-                       m_logger = logger;

+            m_activation = data.ActivationPolicy;

+            m_logger = logger;

                        m_config = configuration;

                        m_dependencies = data.DependencyModel;

-                       m_constructionModel = constructionModel;

-               }

-

-               public DefaultComponentModel(

-                       String name,

-                       Type service,

-                       Lifestyle lifestyle,

-                       ILogger logger,

-                       IConfiguration configuration,

-                       IDependencyModel[] dependencies,

-                       IConstructionModel constructionModel) : this()

-               {

-                       AssertUtil.ArgumentNotNull(name, "name");

-                       AssertUtil.ArgumentNotNull(service, "service");

-                       AssertUtil.ArgumentNotNull(logger, "logger");

-                       AssertUtil.ArgumentNotNull(configuration, "configuration");

-                       AssertUtil.ArgumentNotNull(dependencies, "dependencies");

-                       AssertUtil.ArgumentNotNull(constructionModel, 
"constructionModel");

-

-                       m_name = name;

-                       m_service = service;

-                       m_lifestyle = lifestyle;

-                       m_logger = logger;

-                       m_config = configuration;

-                       m_dependencies = dependencies;

                        m_constructionModel = constructionModel;

                }

 


Modified: 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Model/Default/DefaultComponentModelBuilder.cs
==============================================================================
--- 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Model/Default/DefaultComponentModelBuilder.cs
 (original)
+++ 
avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Model/Default/DefaultComponentModelBuilder.cs
 Mon Aug 30 14:27:53 2004
@@ -355,9 +355,22 @@
 
                                return AvalonComponent.Lifestyle;
                        }
-               }
-
-               public String Name
+               }

+

+        public Apache.Avalon.Framework.Activation ActivationPolicy

+        {

+            get

+            {

+                if (AvalonComponent == null)

+                {

+                    return Apache.Avalon.Framework.Activation.Undefined;

+                }

+

+                return AvalonComponent.Activation;

+            }

+        }

+

+        public String Name
                {
                        get
                        {

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to