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]