Author: hammett Date: Sun Sep 5 15:48:15 2004 New Revision: 43398 Added: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Factory/Default/BaseComponentFactory.cs (contents, props changed) avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/Default/BaseHandler.cs (contents, props changed) avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/Default/BaseHandlerFactory.cs Removed: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Factory/Default/SimpleComponentFactory.cs avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/Default/SimpleHandler.cs avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/Default/SimpleHandlerFactory.cs Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Apache.Avalon.Castle.MicroKernel.csproj avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Assemble/Assembler.cs avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/BaseKernel.cs avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Factory/Default/ComponentInstanceBurden.cs avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Factory/Default/ConcernChainComponentFactory.cs avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/AbstractHandler.cs avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/Default/DefaultHandler.cs avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/Default/DefaultHandlerFactory.cs avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/IKernel.cs avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernel.sln Log: More and more refactor.
Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Apache.Avalon.Castle.MicroKernel.csproj ============================================================================== --- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Apache.Avalon.Castle.MicroKernel.csproj (original) +++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Apache.Avalon.Castle.MicroKernel.csproj Sun Sep 5 15:48:15 2004 @@ -249,17 +249,17 @@ BuildAction = "Compile" /> <File - RelPath = "Factory\Default\ComponentInstanceBurden.cs" + RelPath = "Factory\Default\BaseComponentFactory.cs" SubType = "Code" BuildAction = "Compile" /> <File - RelPath = "Factory\Default\ConcernChainComponentFactory.cs" + RelPath = "Factory\Default\ComponentInstanceBurden.cs" SubType = "Code" BuildAction = "Compile" /> <File - RelPath = "Factory\Default\SimpleComponentFactory.cs" + RelPath = "Factory\Default\ConcernChainComponentFactory.cs" SubType = "Code" BuildAction = "Compile" /> @@ -309,22 +309,22 @@ BuildAction = "Compile" /> <File - RelPath = "Handler\Default\DefaultHandler.cs" + RelPath = "Handler\Default\BaseHandler.cs" SubType = "Code" BuildAction = "Compile" /> <File - RelPath = "Handler\Default\DefaultHandlerFactory.cs" + RelPath = "Handler\Default\BaseHandlerFactory.cs" SubType = "Code" BuildAction = "Compile" /> <File - RelPath = "Handler\Default\SimpleHandler.cs" + RelPath = "Handler\Default\DefaultHandler.cs" SubType = "Code" BuildAction = "Compile" /> <File - RelPath = "Handler\Default\SimpleHandlerFactory.cs" + RelPath = "Handler\Default\DefaultHandlerFactory.cs" SubType = "Code" BuildAction = "Compile" /> Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Assemble/Assembler.cs ============================================================================== --- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Assemble/Assembler.cs (original) +++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Assemble/Assembler.cs Sun Sep 5 15:48:15 2004 @@ -31,12 +31,8 @@ /// <summary> /// Summary description for Assembler. /// </summary> - public class Assembler + public abstract class Assembler { - private Assembler() - { - } - /// <summary> /// /// </summary> 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 Sun Sep 5 15:48:15 2004 @@ -51,7 +51,7 @@ m_key2Handler = new Hashtable(CaseInsensitiveHashCodeProvider.Default, CaseInsensitiveComparer.Default); m_subsystems = new Hashtable(); m_facilities = new Hashtable(); - HandlerFactory = new SimpleHandlerFactory(); + HandlerFactory = new BaseHandlerFactory(); ModelBuilder = new DefaultComponentModelBuilder(this); LifestyleManagerFactory = new SimpleLifestyleManagerFactory(); @@ -126,10 +126,11 @@ } /// <summary> - /// + /// Adds a <see cref="IKernelFacility"/> implementation to + /// the kernel. /// </summary> - /// <param name="key"></param> - /// <param name="facility"></param> + /// <param name="key">Facility id</param> + /// <param name="facility">Facility instance</param> public virtual void AddFacility(String key, IKernelFacility facility) { AssertUtil.ArgumentNotNull(key, "key"); @@ -141,9 +142,9 @@ } /// <summary> - /// + /// Removes a <see cref="IKernelFacility"/> from the kernel. /// </summary> - /// <param name="key"></param> + /// <param name="key">Facility id</param> public virtual void RemoveFacility(String key) { AssertUtil.ArgumentNotNull(key, "key"); @@ -165,7 +166,7 @@ public IHandler GetHandler(String key, object criteria) { - // TODO: IHandler GetHandler( String key, object criteria ) + // TODO: Delegates invocation to LookupSubsystem return null; } Added: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Factory/Default/BaseComponentFactory.cs ============================================================================== --- (empty file) +++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Factory/Default/BaseComponentFactory.cs Sun Sep 5 15:48:15 2004 @@ -0,0 +1,156 @@ + // 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.Factory.Default +{ + using System; + using System.Collections; + + using Apache.Avalon.Castle.MicroKernel.Assemble; + using Apache.Avalon.Castle.MicroKernel.Handler; + using Apache.Avalon.Castle.MicroKernel.Model; + + /// <summary> + /// Summary description for SimpleComponentFactory. + /// </summary> + public class BaseComponentFactory : IComponentFactory + { + private Hashtable m_instance2Burden = new Hashtable(); + protected IKernel m_kernel; + protected IHandler m_handler; + protected IComponentModel m_componentModel; + protected Hashtable m_serv2handler; + + public BaseComponentFactory(IKernel kernel, IHandler handler, + IComponentModel componentModel, + Hashtable serv2handler) + { + AssertUtil.ArgumentNotNull(kernel, "kernel"); + AssertUtil.ArgumentNotNull(componentModel, "componentModel"); + AssertUtil.ArgumentNotNull(serv2handler, "serv2handler"); + + m_kernel = kernel; + m_handler = handler; + m_componentModel = componentModel; + m_serv2handler = serv2handler; + } + + #region IComponentFactory Members + + public virtual Object Incarnate() + { + try + { + ComponentInstanceBurden burden = new ComponentInstanceBurden(); + + object[] arguments = BuildArguments(burden); + + Object instance = Activator.CreateInstance(m_componentModel.ConstructionModel.Implementation, arguments); + + SetupProperties(instance, burden); + AssociateBurden(instance, burden); + instance = RaiseWrapEvent(instance); + RaiseComponentReadyEvent(instance); + + return instance; + } + catch(Exception ex) + { + throw new HandlerException("Exception while attempting to instantiate type", ex); + } + } + + public virtual void Etherialize(object instance) + { + if (instance == null) + { + return; + } + + RaiseComponentReleasedEvent(instance); + instance = RaiseUnWrapEvent(instance); + ReleaseBurden(instance); + } + + #endregion + + private void AssociateBurden(object instance, ComponentInstanceBurden burden) + { + if (burden.HasBurden) + { + m_instance2Burden.Add(instance, burden); + } + } + + private void ReleaseBurden(object instance) + { + if (m_instance2Burden.ContainsKey(instance)) + { + ComponentInstanceBurden burden = + (ComponentInstanceBurden) m_instance2Burden[ instance ]; + + burden.ReleaseBurden(); + + m_instance2Burden.Remove(instance); + } + } + + protected virtual object[] BuildArguments(ComponentInstanceBurden burden) + { + return Assembler.BuildConstructorArguments( + m_componentModel, burden, new ResolveTypeHandler(ResolveType)); + } + + protected virtual void SetupProperties(object instance, ComponentInstanceBurden burden) + { + Assembler.AssembleProperties( + instance, m_componentModel, burden, new ResolveTypeHandler(ResolveType)); + } + + private void ResolveType(IComponentModel model, Type typeRequest, + String argumentOrPropertyName, object key, out object value) + { + value = null; + + if (m_serv2handler.ContainsKey(typeRequest)) + { + IHandler handler = (IHandler) m_serv2handler[ typeRequest ]; + value = handler.Resolve(); + + ComponentInstanceBurden burden = (ComponentInstanceBurden) key; + burden.AddBurden(value, handler); + } + } + + protected virtual object RaiseWrapEvent(object instance) + { + return m_kernel.RaiseWrapEvent(m_handler, instance); + } + + protected virtual object RaiseUnWrapEvent(object instance) + { + return m_kernel.RaiseUnWrapEvent(m_handler, instance); + } + + protected virtual void RaiseComponentReadyEvent(object instance) + { + m_kernel.RaiseComponentReadyEvent(m_handler, instance); + } + + protected virtual void RaiseComponentReleasedEvent(object instance) + { + m_kernel.RaiseComponentReleasedEvent(m_handler, instance); + } + } +} \ No newline at end of file Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Factory/Default/ComponentInstanceBurden.cs ============================================================================== --- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Factory/Default/ComponentInstanceBurden.cs (original) +++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Factory/Default/ComponentInstanceBurden.cs Sun Sep 5 15:48:15 2004 @@ -1,87 +1,78 @@ -// 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.Factory.Default -{ - using System; - using System.Collections; - - /// <summary> - /// ComponentInstanceBurden is responsible for keep tracking - /// of dependencies assembled by the container - not by - /// the component code - and release it correctly on disposal - /// </summary> - public class ComponentInstanceBurden - { - private ArrayList m_list = new ArrayList(); - - public ComponentInstanceBurden() - { - } - - public void AddBurden( Object instance, IHandler handler ) - { - m_list.Add( new BurdenData( instance, handler ) ); - } - - public bool HasBurden - { - get - { - return m_list.Count != 0; - } - } - - public void ReleaseBurden() - { - foreach( BurdenData data in m_list ) - { - data.Handler.Release( data.Instance ); - } - - m_list.Clear(); - } - } - - class BurdenData - { - private object m_instance; - private IHandler m_handler; - - public BurdenData( object instance, IHandler handler ) - { - AssertUtil.ArgumentNotNull( instance, "instance" ); - AssertUtil.ArgumentNotNull( handler, "handler" ); - - m_instance = instance; - m_handler = handler; - } - - public object Instance - { - get - { - return m_instance; - } - } - - public IHandler Handler - { - get - { - return m_handler; - } - } - } -} + // 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.Factory.Default +{ + using System; + using System.Collections; + + /// <summary> + /// ComponentInstanceBurden is responsible for keep track + /// of dependencies assembled by the container - not by + /// the component code - and release them on owner disposal + /// </summary> + public class ComponentInstanceBurden + { + private IList m_list = new ArrayList(); + + public ComponentInstanceBurden() + { + } + + public void AddBurden(Object instance, IHandler handler) + { + m_list.Add(new BurdenData(instance, handler)); + } + + public bool HasBurden + { + get { return m_list.Count != 0; } + } + + public void ReleaseBurden() + { + foreach(BurdenData data in m_list) + { + data.Handler.Release(data.Instance); + } + + m_list.Clear(); + } + } + + internal class BurdenData + { + private object m_instance; + private IHandler m_handler; + + public BurdenData(object instance, IHandler handler) + { + AssertUtil.ArgumentNotNull(instance, "instance"); + AssertUtil.ArgumentNotNull(handler, "handler"); + + m_instance = instance; + m_handler = handler; + } + + public object Instance + { + get { return m_instance; } + } + + public IHandler Handler + { + get { return m_handler; } + } + } +} \ No newline at end of file Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Factory/Default/ConcernChainComponentFactory.cs ============================================================================== --- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Factory/Default/ConcernChainComponentFactory.cs (original) +++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Factory/Default/ConcernChainComponentFactory.cs Sun Sep 5 15:48:15 2004 @@ -20,28 +20,36 @@ using Apache.Avalon.Castle.MicroKernel.Concerns; /// <summary> - /// Summary description for ConcernChainComponentFactory. + /// Sits on the place of a standard <see cref="IComponentFactory"/> + /// but makes the process of construction and destruction pass through + /// a Concern Chain. + /// <para>The actual construction should happen when the CreationConcern + /// invokes the delegate factory. The same for the destruction phase.</para> /// </summary> + /// <remarks> + /// It is important to invoke the delegate factory for creation and destruction + /// of a component instance as it will fire the proper events in the correct order. + /// </remarks> public class ConcernChainComponentFactory : IComponentFactory { private IConcern m_commissionChain; private IConcern m_decomissionChain; private IComponentModel m_model; - private IComponentFactory m_innerFactory; + private IComponentFactory m_delegateFactory; public ConcernChainComponentFactory( IConcern commissionChain, IConcern decomissionChain, - IComponentModel model, IComponentFactory innerFactory) + IComponentModel model, IComponentFactory delegateFactory) { AssertUtil.ArgumentNotNull( commissionChain, "commissionChain" ); AssertUtil.ArgumentNotNull( decomissionChain, "decomissionChain" ); AssertUtil.ArgumentNotNull( model, "model" ); - AssertUtil.ArgumentNotNull( innerFactory, "innerFactory" ); + AssertUtil.ArgumentNotNull( delegateFactory, "delegateFactory" ); m_commissionChain = commissionChain; m_decomissionChain = decomissionChain; m_model = model; - m_innerFactory = innerFactory; + m_delegateFactory = delegateFactory; } #region IComponentFactory Members @@ -50,7 +58,7 @@ { ICreationConcern creationConcern = (ICreationConcern) m_commissionChain; - object instance = creationConcern.Apply( m_model, m_innerFactory ); + object instance = creationConcern.Apply( m_model, m_delegateFactory ); creationConcern.Apply( m_model, instance ); @@ -67,7 +75,7 @@ { if (concern is IDestructionConcern) { - (concern as IDestructionConcern).Apply( m_model, m_innerFactory, instance ); + (concern as IDestructionConcern).Apply( m_model, m_delegateFactory, instance ); break; } 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 Sun Sep 5 15:48:15 2004 @@ -47,7 +47,6 @@ public AbstractHandler(IComponentModel model) { AssertUtil.ArgumentNotNull(model, "model"); - m_componentModel = model; } Added: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/Default/BaseHandler.cs ============================================================================== --- (empty file) +++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/Default/BaseHandler.cs Sun Sep 5 15:48:15 2004 @@ -0,0 +1,108 @@ + // 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.Handler.Default +{ + using System; + + using Apache.Avalon.Castle.MicroKernel.Model; + using Apache.Avalon.Castle.MicroKernel.Factory.Default; + + /// <summary> + /// Provides a fully functional component handler. + /// </summary> + public class BaseHandler : AbstractHandler + { + /// <summary> + /// + /// </summary> + /// <param name="model"></param> + public BaseHandler(IComponentModel model) : base(model) + { + } + + #region IHandler Members + + public override void Init(IKernel kernel) + { + base.Init(kernel); + + // Now we check with the kernel if + // we have the necessary implementations + // for the services requested by the constructor + + EnsureDependenciesCanBeSatisfied(); + CreateComponentFactoryAndLifestyleManager(); + } + + #endregion + + protected virtual void EnsureDependenciesCanBeSatisfied() + { + foreach(IDependencyModel dependency in ComponentModel.Dependencies) + { + AddDependency(dependency.Service); + } + } + + protected virtual void AddDependency(Type service) + { + if (Kernel.HasService(service)) + { + m_serv2handler[ service ] = Kernel.GetHandlerForService(service); + } + else + { + // This handler is considered invalid + // until dependencies are satisfied + SetNewState(State.WaitingDependency); + Dependencies.Add(service); + + // Register ourself in the kernel + // to be notified if the dependency is satified + Kernel.AddDependencyListener( + service, + new DependencyListenerDelegate(DependencySatisfied)); + } + } + + /// <summary> + /// Delegate implementation invoked by kernel + /// when one of registered dependencies were satisfied by + /// new components registered. + /// </summary> + /// <param name="service"></param> + /// <param name="handler"></param> + private void DependencySatisfied(Type service, IHandler handler) + { + m_serv2handler[ service ] = handler; + + Dependencies.Remove(service); + + if (Dependencies.Count == 0) + { + SetNewState(State.Valid); + } + } + + protected virtual void CreateComponentFactoryAndLifestyleManager() + { + IComponentFactory factory = new BaseComponentFactory( + Kernel, this, ComponentModel, m_serv2handler); + + m_lifestyleManager = Kernel.LifestyleManagerFactory.Create( + factory, ComponentModel); + } + } +} \ No newline at end of file Added: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/Default/BaseHandlerFactory.cs ============================================================================== --- (empty file) +++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/Default/BaseHandlerFactory.cs Sun Sep 5 15:48:15 2004 @@ -0,0 +1,44 @@ +// 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.Handler.Default +{ + using System; + + using Apache.Avalon.Castle.MicroKernel.Model; + + /// <summary> + /// Summary description for BaseHandlerFactory. + /// </summary> + public class BaseHandlerFactory : IHandlerFactory + { + public BaseHandlerFactory() + { + } + + #region IHandlerFactory Members + + public virtual IHandler CreateHandler( IComponentModel model ) + { + return new BaseHandler( model ); + } + + public virtual void ReleaseHandler( IHandler handler ) + { + handler.Dispose(); + } + + #endregion + } +} Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/Default/DefaultHandler.cs ============================================================================== --- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/Default/DefaultHandler.cs (original) +++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/Default/DefaultHandler.cs Sun Sep 5 15:48:15 2004 @@ -21,7 +21,7 @@ /// <summary> /// Summary description for DefaultHandler. /// </summary> - public class DefaultHandler : SimpleHandler + public class DefaultHandler : BaseHandler { public DefaultHandler( IComponentModel model ) : base( model ) { @@ -29,12 +29,12 @@ protected override void CreateComponentFactoryAndLifestyleManager() { - IComponentFactory innerFactory = new SimpleComponentFactory( + IComponentFactory delegateFactory = new BaseComponentFactory( Kernel, this, ComponentModel, m_serv2handler ); if (Kernel is IAvalonKernel) { - IAvalonKernel kernel = (IAvalonKernel) Kernel; + IAvalonKernel kernel = Kernel as IAvalonKernel; IConcern commissionChain = kernel.Concerns.GetCommissionChain( kernel ); IConcern decommissionChain = kernel.Concerns.GetDecommissionChain( kernel ); @@ -42,14 +42,14 @@ ConcernChainComponentFactory factory = new ConcernChainComponentFactory( commissionChain, decommissionChain, - ComponentModel, innerFactory ); + ComponentModel, delegateFactory ); - innerFactory = factory; + delegateFactory = factory; } m_lifestyleManager = Kernel.LifestyleManagerFactory.Create( - innerFactory, ComponentModel ); + delegateFactory, ComponentModel ); } } } Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/Default/DefaultHandlerFactory.cs ============================================================================== --- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/Default/DefaultHandlerFactory.cs (original) +++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/Default/DefaultHandlerFactory.cs Sun Sep 5 15:48:15 2004 @@ -16,13 +16,12 @@ { using System; - using Apache.Avalon.Framework; using Apache.Avalon.Castle.MicroKernel.Model; /// <summary> /// Summary description for DefaultHandlerFactory. /// </summary> - public class DefaultHandlerFactory : IHandlerFactory + public class DefaultHandlerFactory : BaseHandlerFactory { public DefaultHandlerFactory() { @@ -30,15 +29,10 @@ #region IHandlerFactory Members - public virtual IHandler CreateHandler( IComponentModel model ) + public override IHandler CreateHandler( IComponentModel model ) { return new DefaultHandler( model ); } - - public virtual void ReleaseHandler( IHandler handler ) - { - handler.Dispose(); - } #endregion } 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 Sun Sep 5 15:48:15 2004 @@ -52,8 +52,18 @@ /// </summary> IHandler this[String key] { get; } + /// <summary> + /// Adds a <see cref="IKernelFacility"/> implementation to + /// the kernel. + /// </summary> + /// <param name="key">Facility id</param> + /// <param name="kernelFacility">Facility instance</param> void AddFacility( String key, IKernelFacility kernelFacility ); + /// <summary> + /// Removes a <see cref="IKernelFacility"/> from the kernel. + /// </summary> + /// <param name="key">Facility id</param> void RemoveFacility( String key ); /// <summary> Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernel.sln ============================================================================== --- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernel.sln (original) +++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernel.sln Sun Sep 5 15:48:15 2004 @@ -7,6 +7,14 @@ ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Avalon.Castle.Windsor", "..\Windsor\Windsor\Apache.Avalon.Castle.Windsor.csproj", "{E60B95FF-FDB6-4DE2-844D-1C0D5695FF09}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Avalon.Castle.Windsor.Test", "..\Windsor\WindsorTest\Apache.Avalon.Castle.Windsor.Test.csproj", "{D39DB46B-C162-41DD-861E-17675BC60461}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject Global GlobalSection(SolutionConfiguration) = preSolution Debug = Debug @@ -21,6 +29,14 @@ {50442F0D-987F-4A8D-B38C-DFA855B9249E}.Debug.Build.0 = Debug|.NET {50442F0D-987F-4A8D-B38C-DFA855B9249E}.Release.ActiveCfg = Release|.NET {50442F0D-987F-4A8D-B38C-DFA855B9249E}.Release.Build.0 = Release|.NET + {E60B95FF-FDB6-4DE2-844D-1C0D5695FF09}.Debug.ActiveCfg = Debug|.NET + {E60B95FF-FDB6-4DE2-844D-1C0D5695FF09}.Debug.Build.0 = Debug|.NET + {E60B95FF-FDB6-4DE2-844D-1C0D5695FF09}.Release.ActiveCfg = Release|.NET + {E60B95FF-FDB6-4DE2-844D-1C0D5695FF09}.Release.Build.0 = Release|.NET + {D39DB46B-C162-41DD-861E-17675BC60461}.Debug.ActiveCfg = Debug|.NET + {D39DB46B-C162-41DD-861E-17675BC60461}.Debug.Build.0 = Debug|.NET + {D39DB46B-C162-41DD-861E-17675BC60461}.Release.ActiveCfg = Release|.NET + {D39DB46B-C162-41DD-861E-17675BC60461}.Release.Build.0 = Release|.NET EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution EndGlobalSection --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]