You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by ha...@apache.org on 2004/08/30 16:56:40 UTC

svn commit: rev 37207 - in avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel: . Concerns Concerns/Default Factory/Default Handler Handler/Default MicroKernelTest MicroKernelTest/Concerns MicroKernelTest/Lifestyle Model Model/Default Subsystems Subsystems/Events/Default

Author: hammett
Date: Mon Aug 30 07:56:39 2004
New Revision: 37207

Added:
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/DefaultAvalonKernel.cs   (contents, props changed)
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/IAvalonKernel.cs   (contents, props changed)
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/IContainerFacility.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/IKernel.cs   (contents, props changed)
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/DefaultAvalonKernelTestCase.cs
Removed:
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/AvalonKernel.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/DefaultKernel.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Kernel.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/DefaultKernelTestCase.cs
Modified:
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Apache.Avalon.Castle.MicroKernel.csproj
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/BaseKernel.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Concerns/ConcernManager.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Concerns/Default/AbstractConcern.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Concerns/Default/EnableLookupConcern.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Concerns/Default/StartConcern.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Concerns/ICommissionConcern.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Concerns/IConcern.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Factory/Default/SimpleComponentFactory.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/SimpleHandler.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/IHandler.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/IKernelSubsystem.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/IResolver.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernel.sln
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/AbstractHandlerTestCase.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/Apache.Avalon.Castle.MicroKernel.Test.csproj
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/AssemblerTestCase.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/BaseKernelTestCase.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/ConcernManagerTestCase.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/Concerns/AbstractConcernTestCase.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/DefaultComponentModelBuilderTestCase.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/DependencyDisposeTestCase.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/EventManagerTestCase.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/EventSubsystemTestCase.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/Lifestyle/LifestyleManagerTestCase.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/LoggerManagerTestCase.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/SimpleComponentFactoryTestCase.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
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Model/IComponentModel.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Model/IConstructionModel.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Model/IDependencyModel.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Model/ModelBuilderException.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Subsystems/AbstractSubsystem.cs
   avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Subsystems/Events/Default/EventManager.cs
Log:
Refactoring 1

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	Mon Aug 30 07:56:39 2004
@@ -104,32 +104,37 @@
                     BuildAction = "Compile"
                 />
                 <File
-                    RelPath = "AvalonKernel.cs"
+                    RelPath = "BaseKernel.cs"
                     SubType = "Code"
                     BuildAction = "Compile"
                 />
                 <File
-                    RelPath = "BaseKernel.cs"
+                    RelPath = "DefaultAvalonKernel.cs"
                     SubType = "Code"
                     BuildAction = "Compile"
                 />
                 <File
-                    RelPath = "DefaultKernel.cs"
+                    RelPath = "IAvalonKernel.cs"
                     SubType = "Code"
                     BuildAction = "Compile"
                 />
                 <File
-                    RelPath = "IKernelSubsystem.cs"
+                    RelPath = "IContainerFacility.cs"
                     SubType = "Code"
                     BuildAction = "Compile"
                 />
                 <File
-                    RelPath = "IResolver.cs"
+                    RelPath = "IKernel.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+                <File
+                    RelPath = "IKernelSubsystem.cs"
                     SubType = "Code"
                     BuildAction = "Compile"
                 />
                 <File
-                    RelPath = "Kernel.cs"
+                    RelPath = "IResolver.cs"
                     SubType = "Code"
                     BuildAction = "Compile"
                 />

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 07:56:39 2004
@@ -16,18 +16,16 @@
 {
 	using System;
 	using System.Collections;
-	using System.Collections.Specialized;
 
-	using Apache.Avalon.DynamicProxy;
 	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>
-	/// Summary description for BaseKernel.
+	/// Base implementation of <see cref="IKernel"/>
 	/// </summary>
-	public class BaseKernel : Kernel
+	public class BaseKernel : IKernel
 	{
 		protected Hashtable m_components;
 
@@ -39,10 +37,10 @@
 
 		protected IHandlerFactory m_handlerFactory;
 
-		protected ILifestyleManagerFactory m_lifestyleManagerFactory;
-
 		protected IComponentModelBuilder m_componentModelBuilder;
 
+		protected ILifestyleManagerFactory m_lifestyleManagerFactory;
+
 		/// <summary>
 		/// 
 		/// </summary>
@@ -54,20 +52,19 @@
 			m_handlerFactory = new Handler.Default.SimpleHandlerFactory();
 			m_dependencyToSatisfy = new Hashtable();
 			m_componentModelBuilder = new Model.Default.DefaultComponentModelBuilder( this );
-			m_lifestyleManagerFactory = new Lifestyle.Default.SimpleLifestyleManagerFactory();
-
-			AddSubsystem( KernelConstants.LOOKUP, new LookupCriteriaMatcher() );
-			AddSubsystem( KernelConstants.EVENTS, new EventManager() );
-		}
-
+			m_lifestyleManagerFactory = new Lifestyle.Default.SimpleLifestyleManagerFactory();
+
+			InitializeSubsystems();
+		}
+
 		#region Kernel Members
 
-		/// <summary>
-		/// 
-		/// </summary>
-		/// <param name="key"></param>
-		/// <param name="service"></param>
-		/// <param name="implementation"></param>
+		/// <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" );
@@ -98,33 +95,6 @@
 		}
 
 		/// <summary>
-		/// 
-		/// </summary>
-		/// <param name="flags"></param>
-		/// <param name="aspect"></param>
-		public void AddAspect( AspectPointCutFlags flags, IAspect aspect )
-		{
-			AssertUtil.ArgumentNotNull( aspect, "aspect" );
-
-			/*
-			if ((AspectPointCutFlags.Before & flags) != 0)
-			{
-				lock(m_aspectBefore)
-				{
-					m_aspectBefore.Add( aspect );
-				}
-			}
-			if ((AspectPointCutFlags.After & flags) != 0)
-			{
-				lock(m_aspectAfter)
-				{
-					m_aspectAfter.Add( aspect );
-				}
-			}
-			*/
-		}
-
-		/// <summary>
 		/// Adds a subsystem.
 		/// </summary>
 		/// <param name="key">Name of this subsystem</param>
@@ -198,20 +168,6 @@
 			}
 		}
 
-		public IAspect[] GetAspects( AspectPointCutFlags pointcut )
-		{
-			if (pointcut == AspectPointCutFlags.Before)
-			{
-				return (IAspect[]) m_aspectBefore.ToArray( typeof(IAspect) );
-			}
-			else if (pointcut == AspectPointCutFlags.After)
-			{
-				return (IAspect[]) m_aspectAfter.ToArray( typeof(IAspect) );
-			}
-
-			return new IAspect[0];
-		}
-
 		/// <summary>
 		/// 
 		/// </summary>
@@ -266,6 +222,15 @@
 		}
 
 		#endregion
+
+		/// <summary>
+		/// 
+		/// </summary>
+		protected virtual void InitializeSubsystems()
+		{
+			AddSubsystem( KernelConstants.LOOKUP, new LookupCriteriaMatcher() );
+			AddSubsystem( KernelConstants.EVENTS, new EventManager() );
+		}
 
 		private void OnNewHandler( String key, Type service, Type implementation, IHandler handler )
 		{

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Concerns/ConcernManager.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Concerns/ConcernManager.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Concerns/ConcernManager.cs	Mon Aug 30 07:56:39 2004
@@ -94,7 +94,7 @@
 			}
 		}
 
-		public IConcern GetCommissionChain( Kernel kernel )
+		public IConcern GetCommissionChain( IKernel kernel )
 		{
 			ArrayList concerns = new ArrayList( m_commissionConcerns );
 			concerns.Insert( 0, m_creationConcern );
@@ -112,7 +112,7 @@
 			return next;
 		}
 
-		public IConcern GetDecommissionChain( Kernel kernel )
+		public IConcern GetDecommissionChain( IKernel kernel )
 		{
 			ArrayList concerns = new ArrayList( m_decommissionConcerns );
 			concerns.Add( m_destructionConcern );

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Concerns/Default/AbstractConcern.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Concerns/Default/AbstractConcern.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Concerns/Default/AbstractConcern.cs	Mon Aug 30 07:56:39 2004
@@ -24,7 +24,7 @@
 	public abstract class AbstractConcern : IConcern
 	{
 		protected IConcern m_next;
-		protected Kernel m_kernel;
+		protected IKernel m_kernel;
 
 		public AbstractConcern(IConcern next)
 		{
@@ -33,12 +33,12 @@
 
 		#region IConcern Members
 
-		public virtual void Init(Kernel kernel)
+		public virtual void Init( IKernel kernel )
 		{
 			m_kernel = kernel;
 		}
 
-		public virtual void Apply(IComponentModel model, object component)
+		public virtual void Apply( IComponentModel model, object component )
 		{
 			if (Next != null)
 			{

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Concerns/Default/EnableLookupConcern.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Concerns/Default/EnableLookupConcern.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Concerns/Default/EnableLookupConcern.cs	Mon Aug 30 07:56:39 2004
@@ -68,10 +68,10 @@
 		/// </summary>
 		public class LookupManager : ILookupManager
 		{
-			Kernel m_kernel;
+			IKernel m_kernel;
 			HybridDictionary m_key2handler = new HybridDictionary();
 
-			public LookupManager( Kernel kernel, IDependencyModel[] dependencies )
+			public LookupManager( IKernel kernel, IDependencyModel[] dependencies )
 			{
 				m_kernel = kernel;
 				

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Concerns/Default/StartConcern.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Concerns/Default/StartConcern.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Concerns/Default/StartConcern.cs	Mon Aug 30 07:56:39 2004
@@ -1,38 +1,35 @@
-// 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.Concerns.Default
-{
-	using System;
-
-	using Apache.Avalon.Framework;
-	using Apache.Avalon.Castle.MicroKernel.Model;
-
-	/// <summary>
-	/// Summary description for StartConcern.
-	/// </summary>
-	public class StartConcern : AbstractConcern, ICommissionConcern
-	{
-		public StartConcern(IConcern next) : base(next)
-		{
-		}
-
-		public override void Apply(IComponentModel model, object component)
-		{
-			ContainerUtil.Start( component );
-
-			base.Apply( model, component );
-		}
-	}
-}
+using Apache.Avalon.Castle.MicroKernel.Model;
+using Apache.Avalon.Framework;
+// 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.Concerns.Default
+{
+	/// <summary>
+	/// Summary description for StartConcern.
+	/// </summary>
+	public class StartConcern : AbstractConcern, ICommissionConcern
+	{
+		public StartConcern(IConcern next) : base(next)
+		{
+		}
+
+		public override void Apply(IComponentModel model, object component)
+		{
+			ContainerUtil.Start(component);
+
+			base.Apply(model, component);
+		}
+	}
+}
\ No newline at end of file

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Concerns/ICommissionConcern.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Concerns/ICommissionConcern.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Concerns/ICommissionConcern.cs	Mon Aug 30 07:56:39 2004
@@ -1,25 +1,23 @@
-// 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.Concerns
-{
-	using System;
-
-	/// <summary>
-	/// Summary description for ICommissionConcern.
-	/// </summary>
-	public interface ICommissionConcern : IConcern
-	{
-	}
-}
+ // 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.Concerns
+{
+	/// <summary>
+	/// Summary description for ICommissionConcern.
+	/// </summary>
+	public interface ICommissionConcern : IConcern
+	{
+	}
+}
\ No newline at end of file

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Concerns/IConcern.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Concerns/IConcern.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Concerns/IConcern.cs	Mon Aug 30 07:56:39 2004
@@ -23,7 +23,7 @@
 	/// </summary>
 	public interface IConcern
 	{
-		void Init( Kernel kernel );
+		void Init( IKernel kernel );
 
 		void Apply( IComponentModel model, object component );
 

Added: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/DefaultAvalonKernel.cs
==============================================================================
--- (empty file)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/DefaultAvalonKernel.cs	Mon Aug 30 07:56:39 2004
@@ -0,0 +1,62 @@
+// 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.Concerns;
+	using Apache.Avalon.Castle.MicroKernel.Model;
+	using Apache.Avalon.Castle.MicroKernel.Subsystems.Configuration.Default;
+	using Apache.Avalon.Castle.MicroKernel.Subsystems.Logger.Default;
+	using Apache.Avalon.Castle.MicroKernel.Subsystems.Context.Default;
+
+	/// <summary>
+	/// Specialization of BaseKernel to adhere to Avalon 
+	/// constraints and semantics.
+	/// </summary>
+	public class DefaultAvalonKernel : BaseKernel, IAvalonKernel
+	{
+		protected ConcernManager m_concerns = new ConcernManager();
+
+		/// <summary>
+		/// 
+		/// </summary>
+		public DefaultAvalonKernel()
+		{
+			m_handlerFactory = new Handler.Default.DefaultHandlerFactory();
+			m_lifestyleManagerFactory = new Lifestyle.Default.SimpleLifestyleManagerFactory();
+
+			AddSubsystem( KernelConstants.CONFIGURATION, new DefaultConfigurationManager() );
+			AddSubsystem( KernelConstants.LOGGER, new LoggerManager() );
+			// AddSubsystem( KernelConstants.CONTEXT, new ContextManager() );
+		}
+
+		#region AvalonKernel Members
+
+		/// <summary>
+		/// Manages the concerns related
+		/// to Avalon Framework
+		/// </summary>
+		public ConcernManager Concerns
+		{
+			get
+			{
+				return m_concerns;
+			}
+		}
+
+		#endregion
+	}
+}

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Factory/Default/SimpleComponentFactory.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Factory/Default/SimpleComponentFactory.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Factory/Default/SimpleComponentFactory.cs	Mon Aug 30 07:56:39 2004
@@ -27,23 +27,23 @@
 	/// </summary>
 	public class SimpleComponentFactory : IComponentFactory
 	{
-		protected IAspect[] m_before;
-		protected IAspect[] m_after;
+		// protected IAspect[] m_before;
+		// protected IAspect[] m_after;
 		protected IComponentModel m_componentModel;
 		protected Hashtable m_serv2handler;
 		private Hashtable m_instances = new Hashtable();
 
-		public SimpleComponentFactory( IAspect[] before, IAspect[] after, 
+		public SimpleComponentFactory( /*IAspect[] before, IAspect[] after, */
 			IComponentModel componentModel,
 			Hashtable serv2handler)
 		{
-			AssertUtil.ArgumentNotNull( before, "before" );
-			AssertUtil.ArgumentNotNull( after, "after" );
+			// AssertUtil.ArgumentNotNull( before, "before" );
+			// AssertUtil.ArgumentNotNull( after, "after" );
 			AssertUtil.ArgumentNotNull( componentModel, "componentModel" );
 			AssertUtil.ArgumentNotNull( serv2handler, "serv2handler" );
 
-			m_before = before;
-			m_after = after;
+			// m_before = before;
+			// m_after = after;
 			m_componentModel = componentModel;
 			m_serv2handler = serv2handler;
 		}
@@ -60,12 +60,13 @@
 
 				Object instance = Activator.CreateInstance( m_componentModel.ConstructionModel.Implementation, arguments );
 
+				/*
 				if (m_before.Length != 0 || m_after.Length != 0 )
 				{
 					instance = DynamicProxy.ProxyGenerator.CreateProxy( 
 						new Type[] { m_componentModel.Service }, 
 						new Aspects.AspectInvocationHandler( m_before, m_after, instance ) ); 
-				}
+				}*/
 
 				SetupProperties( instance, burden );
 

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 07:56:39 2004
@@ -25,7 +25,7 @@
 	/// </summary>
 	public abstract class AbstractHandler : IHandler
 	{
-		protected Kernel m_kernel;
+		protected IKernel m_kernel;
 
 		protected IComponentModel m_componentModel;
 
@@ -53,7 +53,7 @@
 
 		#region IHandler Members
 
-		public virtual void Init( Kernel kernel )
+		public virtual void Init( IKernel kernel )
 		{
 			m_kernel = kernel;
 		}

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	Mon Aug 30 07:56:39 2004
@@ -32,13 +32,13 @@
 		protected override void CreateComponentFactoryAndLifestyleManager()
 		{
 			IComponentFactory innerFactory = new Factory.Default.SimpleComponentFactory( 
-				m_kernel.GetAspects(AspectPointCutFlags.Before), 
-				m_kernel.GetAspects(AspectPointCutFlags.After), 
+				// m_kernel.GetAspects(AspectPointCutFlags.Before), 
+				// m_kernel.GetAspects(AspectPointCutFlags.After), 
 				m_componentModel, m_serv2handler);
 
-			if (m_kernel is AvalonKernel)
+			if (m_kernel is IAvalonKernel)
 			{
-				AvalonKernel kernel = (AvalonKernel) m_kernel;
+				IAvalonKernel kernel = (IAvalonKernel) m_kernel;
 
 				IConcern commissionChain = kernel.Concerns.GetCommissionChain( kernel );
 				IConcern decommissionChain = kernel.Concerns.GetDecommissionChain( kernel );

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/Default/SimpleHandler.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/Default/SimpleHandler.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/Default/SimpleHandler.cs	Mon Aug 30 07:56:39 2004
@@ -36,7 +36,7 @@
 
 		#region IHandler Members
 
-		public override void Init( Kernel kernel )
+		public override void Init( IKernel kernel )
 		{
 			base.Init(kernel);
 
@@ -101,8 +101,8 @@
 		protected virtual void CreateComponentFactoryAndLifestyleManager()
 		{
 			IComponentFactory factory = new Factory.Default.SimpleComponentFactory( 
-				m_kernel.GetAspects(AspectPointCutFlags.Before), 
-				m_kernel.GetAspects(AspectPointCutFlags.After), 
+				// m_kernel.GetAspects(AspectPointCutFlags.Before), 
+				// m_kernel.GetAspects(AspectPointCutFlags.After), 
 				m_componentModel, m_serv2handler);
 
 			m_lifestyleManager = m_kernel.LifestyleManagerFactory.Create( 

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/IHandler.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/IHandler.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Handler/IHandler.cs	Mon Aug 30 07:56:39 2004
@@ -25,7 +25,7 @@
 		/// 
 		/// </summary>
 		/// <param name="kernel"></param>
-		void Init( Kernel kernel );
+		void Init( IKernel kernel );
 
 		/// <summary>
 		/// 

Added: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/IAvalonKernel.cs
==============================================================================
--- (empty file)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/IAvalonKernel.cs	Mon Aug 30 07:56:39 2004
@@ -0,0 +1,36 @@
+// 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.Concerns;
+	using Apache.Avalon.Castle.MicroKernel.Model;
+
+	/// <summary>
+	/// Specialization of Kernel to support 
+	/// avalon semantics
+	/// </summary>
+	public interface IAvalonKernel : IKernel
+	{
+		/// <summary>
+		/// Manages the concerns related to Avalon Framework
+		/// </summary>
+		ConcernManager Concerns
+		{
+			get;
+		}
+	}
+}

Added: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/IContainerFacility.cs
==============================================================================
--- (empty file)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/IContainerFacility.cs	Mon Aug 30 07:56:39 2004
@@ -0,0 +1,30 @@
+// 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;
+
+	/// <summary>
+	/// Summary description for IContainerFacility.
+	/// </summary>
+	public interface IContainerFacility
+	{
+		/// <summary>
+		/// 
+		/// </summary>
+		/// <param name="kernel"></param>
+		void Init( IKernel kernel );
+	}
+}

Added: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/IKernel.cs
==============================================================================
--- (empty file)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/IKernel.cs	Mon Aug 30 07:56:39 2004
@@ -0,0 +1,103 @@
+ // 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 DependencyListenerDelegate(Type service, IHandler handler);
+
+	/// <summary>
+	/// Defines the Kernel service
+	/// </summary>
+	public interface IKernel
+	{
+		/// <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>
+		void AddComponent(String key, Type service, Type implementation);
+
+		/// <summary>
+		/// IComponentModel instance builder.
+		/// </summary>
+		IComponentModelBuilder ModelBuilder { get; set; }
+
+		/// <summary>
+		/// Obtains a component handler using the 
+		/// unique component key
+		/// </summary>
+		IHandler this[String key] { get; }
+
+		/// <summary>
+		/// 
+		/// </summary>
+		/// <param name="key"></param>
+		/// <param name="criteria"></param>
+		/// <returns></returns>
+		IHandler GetHandler(String key, object criteria);
+
+		/// <summary>
+		/// Gets or Sets the IHandlerFactory implementation
+		/// </summary>
+		IHandlerFactory HandlerFactory { get; set; }
+
+		/// <summary>
+		/// Gets or Sets the ILifestyleManagerFactory implementation
+		/// </summary>
+		ILifestyleManagerFactory LifestyleManagerFactory { get; set; }
+
+		/// <summary>
+		/// Returns true if kernel "knows" the specified 
+		/// service
+		/// </summary>
+		/// <param name="service">The service interface</param>
+		/// <returns>true if is already registered</returns>
+		bool HasService(Type service);
+
+		/// <summary>
+		/// Used by handlers to register itself as 
+		/// and dependency to be satisfied.
+		/// </summary>
+		/// <param name="service">The service interface</param>
+		/// <param name="depDelegate">Delegate to be invoked</param>
+		void AddDependencyListener(Type service, DependencyListenerDelegate depDelegate);
+
+		/// <summary>
+		/// Returns a IHandler implementation for 
+		/// the specified service
+		/// </summary>
+		/// <param name="service">The service interface</param>
+		/// <returns>IHandler implementation</returns>
+		IHandler GetHandlerForService(Type service);
+
+		/// <summary>
+		/// Adds a subsystem.
+		/// </summary>
+		/// <param name="key">Name of this subsystem</param>
+		/// <param name="system">Subsystem implementation</param>
+		void AddSubsystem(String key, IKernelSubsystem system);
+
+		/// <summary>
+		/// Returns a registered subsystem;
+		/// </summary>
+		/// <param name="key">Key used when registered subsystem</param>
+		/// <returns>Subsystem implementation</returns>
+		IKernelSubsystem GetSubsystem(String key);
+	}
+}
\ No newline at end of file

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/IKernelSubsystem.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/IKernelSubsystem.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/IKernelSubsystem.cs	Mon Aug 30 07:56:39 2004
@@ -1,26 +1,24 @@
-// 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;
-
-	/// <summary>
-	/// Summary description for IKernelSubsystem.
-	/// </summary>
-	public interface IKernelSubsystem
-	{
-		void Init(Kernel kernel);
-	}
-}
+ // 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
+{
+	/// <summary>
+	/// Summary description for IKernelSubsystem.
+	/// </summary>
+	public interface IKernelSubsystem
+	{
+		void Init(IKernel kernel);
+	}
+}
\ No newline at end of file

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/IResolver.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/IResolver.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/IResolver.cs	Mon Aug 30 07:56:39 2004
@@ -1,28 +1,26 @@
-// 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;
-
-	/// <summary>
-	/// Summary description for IResolver.
-	/// </summary>
-	public interface IResolver
-	{
-		object Resolve();
-
-		void Release( object instance );
-	}
-}
+ // 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
+{
+	/// <summary>
+	/// Summary description for IResolver.
+	/// </summary>
+	public interface IResolver
+	{
+		object Resolve();
+
+		void Release(object instance);
+	}
+}
\ No newline at end of file

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	Mon Aug 30 07:56:39 2004
@@ -1,29 +1,37 @@
-Microsoft Visual Studio Solution File, Format Version 8.00
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Avalon.Castle.MicroKernel", "Apache.Avalon.Castle.MicroKernel.csproj", "{1E57B734-BA4B-4ADE-B4C2-78C7D4993AD4}"
-	ProjectSection(ProjectDependencies) = postProject
-	EndProjectSection
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Avalon.Castle.MicroKernel.Test", "MicroKernelTest\Apache.Avalon.Castle.MicroKernel.Test.csproj", "{50442F0D-987F-4A8D-B38C-DFA855B9249E}"
-	ProjectSection(ProjectDependencies) = postProject
-	EndProjectSection
-EndProject
-Global
-	GlobalSection(SolutionConfiguration) = preSolution
-		Debug = Debug
-		Release = Release
-	EndGlobalSection
-	GlobalSection(ProjectConfiguration) = postSolution
-		{1E57B734-BA4B-4ADE-B4C2-78C7D4993AD4}.Debug.ActiveCfg = Debug|.NET
-		{1E57B734-BA4B-4ADE-B4C2-78C7D4993AD4}.Debug.Build.0 = Debug|.NET
-		{1E57B734-BA4B-4ADE-B4C2-78C7D4993AD4}.Release.ActiveCfg = Release|.NET
-		{1E57B734-BA4B-4ADE-B4C2-78C7D4993AD4}.Release.Build.0 = Release|.NET
-		{50442F0D-987F-4A8D-B38C-DFA855B9249E}.Debug.ActiveCfg = Debug|.NET
-		{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
-	EndGlobalSection
-	GlobalSection(ExtensibilityGlobals) = postSolution
-	EndGlobalSection
-	GlobalSection(ExtensibilityAddIns) = postSolution
-	EndGlobalSection
-EndGlobal
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Avalon.Castle.MicroKernel", "Apache.Avalon.Castle.MicroKernel.csproj", "{1E57B734-BA4B-4ADE-B4C2-78C7D4993AD4}"
+	ProjectSection(ProjectDependencies) = postProject
+	EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Avalon.Castle.MicroKernel.Test", "MicroKernelTest\Apache.Avalon.Castle.MicroKernel.Test.csproj", "{50442F0D-987F-4A8D-B38C-DFA855B9249E}"
+	ProjectSection(ProjectDependencies) = postProject
+	EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Avalon.Castle.Facilities.Aspects", "..\Facilities\Aspects\Apache.Avalon.Castle.Facilities.Aspects.csproj", "{17546A9D-FAE9-42D1-BF36-740187216D34}"
+	ProjectSection(ProjectDependencies) = postProject
+	EndProjectSection
+EndProject
+Global
+	GlobalSection(SolutionConfiguration) = preSolution
+		Debug = Debug
+		Release = Release
+	EndGlobalSection
+	GlobalSection(ProjectConfiguration) = postSolution
+		{1E57B734-BA4B-4ADE-B4C2-78C7D4993AD4}.Debug.ActiveCfg = Debug|.NET
+		{1E57B734-BA4B-4ADE-B4C2-78C7D4993AD4}.Debug.Build.0 = Debug|.NET
+		{1E57B734-BA4B-4ADE-B4C2-78C7D4993AD4}.Release.ActiveCfg = Release|.NET
+		{1E57B734-BA4B-4ADE-B4C2-78C7D4993AD4}.Release.Build.0 = Release|.NET
+		{50442F0D-987F-4A8D-B38C-DFA855B9249E}.Debug.ActiveCfg = Debug|.NET
+		{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
+		{17546A9D-FAE9-42D1-BF36-740187216D34}.Debug.ActiveCfg = Debug|.NET
+		{17546A9D-FAE9-42D1-BF36-740187216D34}.Debug.Build.0 = Debug|.NET
+		{17546A9D-FAE9-42D1-BF36-740187216D34}.Release.ActiveCfg = Release|.NET
+		{17546A9D-FAE9-42D1-BF36-740187216D34}.Release.Build.0 = Release|.NET
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+	EndGlobalSection
+	GlobalSection(ExtensibilityAddIns) = postSolution
+	EndGlobalSection
+EndGlobal

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/AbstractHandlerTestCase.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/AbstractHandlerTestCase.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/AbstractHandlerTestCase.cs	Mon Aug 30 07:56:39 2004
@@ -30,7 +30,7 @@
 	[TestFixture]
 	public class AbstractHandlerTestCase : Assertion
 	{
-		private Kernel kernel = new DefaultKernel();
+		private IKernel kernel = new DefaultAvalonKernel();
 		private Type service = typeof( IMailService );
 		private Type implementation = typeof( SimpleMailService );
 		private IComponentModel model;

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/Apache.Avalon.Castle.MicroKernel.Test.csproj
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/Apache.Avalon.Castle.MicroKernel.Test.csproj	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/Apache.Avalon.Castle.MicroKernel.Test.csproj	Mon Aug 30 07:56:39 2004
@@ -124,17 +124,17 @@
                     BuildAction = "Compile"
                 />
                 <File
-                    RelPath = "DefaultComponentModelBuilderTestCase.cs"
+                    RelPath = "DefaultAvalonKernelTestCase.cs"
                     SubType = "Code"
                     BuildAction = "Compile"
                 />
                 <File
-                    RelPath = "DefaultConfigurationManagerTestCase.cs"
+                    RelPath = "DefaultComponentModelBuilderTestCase.cs"
                     SubType = "Code"
                     BuildAction = "Compile"
                 />
                 <File
-                    RelPath = "DefaultKernelTestCase.cs"
+                    RelPath = "DefaultConfigurationManagerTestCase.cs"
                     SubType = "Code"
                     BuildAction = "Compile"
                 />

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/AssemblerTestCase.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/AssemblerTestCase.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/AssemblerTestCase.cs	Mon Aug 30 07:56:39 2004
@@ -30,7 +30,7 @@
 	[TestFixture]
 	public class AssemblerTestCase : Assertion
 	{
-		private AvalonKernel m_kernel = new DefaultKernel();
+		private IAvalonKernel m_kernel = new DefaultAvalonKernel();
 
 		private DefaultComponentModelBuilder m_builder;
 

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/BaseKernelTestCase.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/BaseKernelTestCase.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/BaseKernelTestCase.cs	Mon Aug 30 07:56:39 2004
@@ -68,58 +68,41 @@
 			handler.Release( service );
 		}
 
-		/// <summary>
-		/// Adds a InterceptionAspect to calling chain and check if is has been called
-		/// during method execution
-		/// </summary>
+		/*
 		[Test]
-		public void AddingAspect()
+		public void FacilityEvents()
 		{
 			BaseKernel container = new BaseKernel();
+			MockFacility facility = new MockFacility();
 
-			InterceptionAspect aspect = new InterceptionAspect();
+			container.RegisterFacility( facility );
 
-			container.AddAspect( 
-				AspectPointCutFlags.Before|AspectPointCutFlags.After, 
-				aspect );
+			Assert( facility.OnInitCalled );
 
-			container.AddComponent( "a", typeof(IMailService), typeof(SimpleMailService) );
+			container.AddComponent( "a", typeof(IMailService), typeof(SimpleMailServiceWithLogger) );
+
+			Assert( facility.ComponentAddedCalled );
 
 			IHandler handler = container[ "a" ];
 
 			IMailService service = handler.Resolve() as IMailService;
 
+			Assert( facility.ComponentCreatedCalled );
+
 			AssertNotNull( service );
 
-			service.Send("hammett at apache dot org", "johndoe at yahoo dot org", "Aloha!", "What's up?");
+			service.Send("hammett at apache dot org", 
+				"johndoe at yahoo dot org", "Aloha!", "What's up?");
 
 			handler.Release( service );
 
-			AssertEquals( 2, aspect.m_invocations.Count );
-			AssertEquals( "Before Send", aspect.m_invocations[0] );
-			AssertEquals( "After Send", aspect.m_invocations[1] );
+			Assert( facility.ComponentReleasedCalled );
 		}
 
-		public class InterceptionAspect : IAspect
+		public class MockFacility : IContainerFacility
 		{
-			public ArrayList m_invocations = new ArrayList();
-
-			public void Perform( AspectPointCutFlags pointcut, 
-				object componentInstance, 
-				MethodBase method, 
-				object returnValue, 
-				Exception exception, 
-				params object[] arguments)
-			{
-				if (pointcut == AspectPointCutFlags.Before)
-				{
-					m_invocations.Add("Before " + method.Name);
-				}
-				else if (pointcut == AspectPointCutFlags.After)
-				{
-					m_invocations.Add("After " + method.Name);
-				}
-			}
+			
 		}
+		*/
 	}
 }

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/ConcernManagerTestCase.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/ConcernManagerTestCase.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/ConcernManagerTestCase.cs	Mon Aug 30 07:56:39 2004
@@ -27,12 +27,12 @@
 	[TestFixture]
 	public class ConcernManagerTestCase : Assertion
 	{
-		private Kernel m_kernel;
+		private IKernel m_kernel;
 
 		[SetUp]
 		public void CreateKernel()
 		{
-			m_kernel = new DefaultKernel();
+			m_kernel = new DefaultAvalonKernel();
 		}
 
 		[Test]

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/Concerns/AbstractConcernTestCase.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/Concerns/AbstractConcernTestCase.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/Concerns/AbstractConcernTestCase.cs	Mon Aug 30 07:56:39 2004
@@ -28,7 +28,7 @@
 	/// </summary>
 	public abstract class AbstractConcernTestCase : Assertion
 	{
-		protected Kernel m_kernel = new DefaultKernel();
+		protected IKernel m_kernel = new DefaultAvalonKernel();
 
 		public abstract IConcern Create();
 

Added: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/DefaultAvalonKernelTestCase.cs
==============================================================================
--- (empty file)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/DefaultAvalonKernelTestCase.cs	Mon Aug 30 07:56:39 2004
@@ -0,0 +1,153 @@
+using Apache.Avalon.Castle.MicroKernel.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.Test
+{
+	using System;
+
+	using NUnit.Framework;
+
+	using Apache.Avalon.Castle.MicroKernel.Test.Components;
+
+	/// <summary>
+	/// Summary description for DefaultAvalonKernelTestCase.
+	/// </summary>
+	[TestFixture]
+	public class DefaultAvalonKernelTestCase : Assertion
+	{
+		[Test]
+		public void Creation()
+		{
+			IAvalonKernel kernel = new DefaultAvalonKernel();
+			AssertNotNull(kernel);
+		}
+
+		/// <summary>
+		/// Just a simple Service resolution.
+		/// No concerns or aspects involved.
+		/// </summary>
+		[Test]
+		public void SimpleUsage()
+		{
+			IAvalonKernel container = new DefaultAvalonKernel();
+			container.AddComponent( "a", typeof(IMailService), typeof(SimpleMailService) );
+
+			IHandler handler = container[ "a" ];
+
+			IMailService service = handler.Resolve() as IMailService;
+
+			AssertNotNull( service );
+
+			service.Send("hammett at apache dot org", "johndoe at yahoo dot org", "Aloha!", "What's up?");
+
+			handler.Release( service );
+		}
+
+		[Test]
+		public void SimpleAvalonComponent()
+		{
+			IAvalonKernel container = new DefaultAvalonKernel();
+			container.AddComponent( "a", typeof(IMailService), typeof(AvalonMailService2) );
+
+			IHandler handler = container[ "a" ];
+
+			IMailService service = handler.Resolve() as IMailService;
+
+			AssertNotNull( service );
+
+			AvalonMailService realInstance = (AvalonMailService) service;
+
+			Assert( realInstance.initialized );
+			Assert( realInstance.configured );
+			Assert( !realInstance.disposed );
+
+			service.Send("hammett at apache dot org", "johndoe at yahoo dot org", "Aloha!", "What's up?");
+
+			handler.Release( service );
+
+			Assert( realInstance.disposed );
+		}
+
+		[Test]
+		public void AvalonComponentWithUnsatisfiedDependencies()
+		{
+			IAvalonKernel container = new DefaultAvalonKernel();
+			container.AddComponent( "b", typeof(ISpamService), typeof(AvalonSpamService) );
+
+			IHandler handler = container[ "b" ];
+
+			try
+			{
+				ISpamService service = handler.Resolve() as ISpamService;
+				Fail("Dependencies unsatisfied for this component. Resolve should fail.");
+			}
+			catch(HandlerException)
+			{
+				// Expected.
+			}
+		}
+
+		[Test]
+		public void AvalonComponentWithDependencies()
+		{
+			IAvalonKernel container = new DefaultAvalonKernel();
+			container.AddComponent( "a", typeof(IMailService), typeof(AvalonMailService) );
+			container.AddComponent( "b", typeof(ISpamService), typeof(AvalonSpamService) );
+
+			IHandler handler = container[ "b" ];
+
+			ISpamService service = handler.Resolve() as ISpamService;
+			AssertNotNull( service );
+
+			service.AnnoyPeople( "Work at home and earn a thousand dollars per second!" );
+
+			handler.Release( service );
+		}
+
+		[Test]
+		public void HybridAvalonComponent()
+		{
+			IAvalonKernel container = new DefaultAvalonKernel();
+			container.AddComponent( "a", typeof(IMailService), typeof(AvalonMailService) );
+			container.AddComponent( "b", typeof(ISpamService), typeof(AvalonSpamService2) );
+
+			IHandler handler = container[ "b" ];
+
+			ISpamService service = handler.Resolve() as ISpamService;
+			AssertNotNull( service );
+
+			service.AnnoyPeople( "Work at home and earn a thousand dollars per second!" );
+
+			handler.Release( service );
+		}
+
+		[Test]
+		public void HybridAvalonComponentUsingSetters()
+		{
+			IAvalonKernel container = new DefaultAvalonKernel();
+			container.AddComponent( "a", typeof(IMailService), typeof(AvalonMailService) );
+			container.AddComponent( "b", typeof(ISpamService2), typeof(AvalonSpamService3) );
+
+			IHandler handler = container[ "b" ];
+
+			ISpamService service = handler.Resolve() as ISpamService;
+			AssertNotNull( service );
+
+			service.AnnoyPeople( "Work at home and earn a thousand dollars per second!" );
+
+			handler.Release( service );
+		}
+	}
+}

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/DefaultComponentModelBuilderTestCase.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/DefaultComponentModelBuilderTestCase.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/DefaultComponentModelBuilderTestCase.cs	Mon Aug 30 07:56:39 2004
@@ -29,7 +29,7 @@
 	[TestFixture]
 	public class DefaultComponentModelBuilderTestCase : Assertion
 	{
-		private Kernel m_kernel;
+		private IKernel m_kernel;
 
 		[SetUp]
 		public void CreateKernel()

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/DependencyDisposeTestCase.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/DependencyDisposeTestCase.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/DependencyDisposeTestCase.cs	Mon Aug 30 07:56:39 2004
@@ -31,7 +31,7 @@
 		[Test]
 		public void SingletonDependencyDisposal()
 		{
-			AvalonKernel container = new DefaultKernel();
+			IAvalonKernel container = new DefaultAvalonKernel();
 			container.AddComponent( "a", typeof(IMailService), typeof(AvalonMailService) );
 			container.AddComponent( "b", typeof(ISpamService2), typeof(AvalonSpamService3) );
 
@@ -52,7 +52,7 @@
 		[Test]
 		public void TransientDependencyDisposal()
 		{
-			AvalonKernel container = new DefaultKernel();
+			IAvalonKernel container = new DefaultAvalonKernel();
 			container.AddComponent( "a", typeof(IMailService), typeof(AvalonMailService2) );
 			container.AddComponent( "b", typeof(ISpamService2), typeof(AvalonSpamService3) );
 
@@ -69,6 +69,5 @@
 
 			Assert( "A transient component should have been disposed", mailService.disposed );
 		}
-
 	}
 }

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/EventManagerTestCase.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/EventManagerTestCase.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/EventManagerTestCase.cs	Mon Aug 30 07:56:39 2004
@@ -28,23 +28,23 @@
 	[TestFixture]
 	public class EventManagerTestCase : Assertion
 	{
-		private Kernel m_kernel;
+		private IKernel m_kernel;
 		private bool m_invoked = false;
 
 		[SetUp]
 		public void CreateKernel()
 		{
-			m_kernel = new DefaultKernel();
+			m_kernel = new DefaultAvalonKernel();
 		}
 
 		[Test]
 		public void TestUsage()
 		{
-			EventManager manager = new EventManager();
+			IEventManager manager = new EventManager();
 			manager.Init( m_kernel );
 
-			manager.ComponentAdded += new KernelDelegate(Evento);
-			manager.ComponentDestroyed += new KernelDelegate(Evento);
+			manager.ComponentAdded += new KernelDelegate(TheEvent);
+			manager.ComponentDestroyed += new KernelDelegate(TheEvent);
 			
 			Assert( !m_invoked );
 			
@@ -62,7 +62,7 @@
 			Assert( m_invoked );
 		}
 
-		public void Evento( EventManagerData data )
+		public void TheEvent( EventManagerData data )
 		{
 			m_invoked = true;
 		}

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/EventSubsystemTestCase.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/EventSubsystemTestCase.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/EventSubsystemTestCase.cs	Mon Aug 30 07:56:39 2004
@@ -35,7 +35,7 @@
 		[Test]
 		public void TestComponentAddedEvent()
 		{
-			Kernel kernel = new DefaultKernel();
+			IKernel kernel = new DefaultAvalonKernel();
 
 			IEventManager eventManager = (IEventManager) kernel.GetSubsystem( KernelConstants.EVENTS );
 			eventManager.ComponentAdded += new KernelDelegate(OnComponentAdded);
@@ -53,7 +53,7 @@
 		[Test]
 		public void TestComponentCreatedEvent()
 		{
-			Kernel kernel = new DefaultKernel();
+			IKernel kernel = new DefaultAvalonKernel();
 
 			IEventManager eventManager = (IEventManager) kernel.GetSubsystem( KernelConstants.EVENTS );
 			eventManager.ComponentCreated += new KernelDelegate(OnComponentCreated);
@@ -75,7 +75,7 @@
 		[Test]
 		public void TestComponentDestroyedEvent()
 		{
-			Kernel kernel = new DefaultKernel();
+			IKernel kernel = new DefaultAvalonKernel();
 
 			IEventManager eventManager = (IEventManager) kernel.GetSubsystem( KernelConstants.EVENTS );
 			eventManager.ComponentDestroyed += new KernelDelegate(OnComponentDestroyed);

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/Lifestyle/LifestyleManagerTestCase.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/Lifestyle/LifestyleManagerTestCase.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/Lifestyle/LifestyleManagerTestCase.cs	Mon Aug 30 07:56:39 2004
@@ -28,14 +28,14 @@
 	[TestFixture]
 	public class LifestyleManagerTestCase : Assertion
 	{
-		private AvalonKernel m_kernel;
+		private IAvalonKernel m_kernel;
 
 		private IComponent m_instance3;
 
 		[SetUp]
 		public void CreateContainer()
 		{
-			m_kernel = new DefaultKernel();
+			m_kernel = new DefaultAvalonKernel();
 		}
 
 		[Test]

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/LoggerManagerTestCase.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/LoggerManagerTestCase.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/LoggerManagerTestCase.cs	Mon Aug 30 07:56:39 2004
@@ -31,7 +31,7 @@
 		[Test]
 		public void TestUsage()
 		{
-			Kernel kernel = new BaseKernel();
+			IKernel kernel = new BaseKernel();
 			LoggerManager manager = new LoggerManager();
 
 			kernel.AddSubsystem( KernelConstants.LOGGER, manager );
@@ -44,7 +44,7 @@
 		[Test]
 		public void TestCreateLogger()
 		{
-			Kernel kernel = new BaseKernel();
+			IKernel kernel = new BaseKernel();
 			LoggerManager manager = new LoggerManager();
 
 			kernel.AddSubsystem( KernelConstants.LOGGER, manager );

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/SimpleComponentFactoryTestCase.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/SimpleComponentFactoryTestCase.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/MicroKernelTest/SimpleComponentFactoryTestCase.cs	Mon Aug 30 07:56:39 2004
@@ -53,7 +53,7 @@
 			IComponentModel model = new DefaultComponentModelBuilder(kernel).BuildModel( "a", service, implementation );
 
 			SimpleComponentFactory factory = new SimpleComponentFactory( 
-				new IAspect[0], new IAspect[0], model, new Hashtable() );
+				/*new IAspect[0], new IAspect[0],*/ model, new Hashtable() );
 
 			Object instance = factory.Incarnate();
 
@@ -81,7 +81,7 @@
 			serv2Handler[ serviceDep ] = kernel.GetHandlerForService( serviceDep );
 
 			SimpleComponentFactory factory = new SimpleComponentFactory( 
-				new IAspect[0], new IAspect[0], model, serv2Handler );
+				/*new IAspect[0], new IAspect[0],*/ model, serv2Handler );
 
 			Object instance = factory.Incarnate();
 
@@ -116,7 +116,7 @@
 			serv2Handler[ serviceDep2 ] = kernel.GetHandlerForService( serviceDep2 );
 
 			SimpleComponentFactory factory = new SimpleComponentFactory( 
-				new IAspect[0], new IAspect[0], model, serv2Handler );
+				/*new IAspect[0], new IAspect[0],*/ model, serv2Handler );
 
 			Object instance = factory.Incarnate();
 

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 07:56:39 2004
@@ -1,140 +1,141 @@
-// 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.Model.Default
-{
-	using System;
-
-	using Apache.Avalon.Framework;
-	using Apache.Avalon.Castle.MicroKernel.Model;
-
-	/// <summary>
-	/// Summary description for DefaultComponentModel.
-	/// </summary>
-	public class DefaultComponentModel : IComponentModel
-	{
-		private Type m_service;
-		private String m_name;
-		private Lifestyle m_lifestyle;
-		private ILogger m_logger;
-		private IConfiguration m_config;
-		private IContext m_context;
-		private IDependencyModel[] m_dependencies;
-		private IConstructionModel m_constructionModel;
-
-		public DefaultComponentModel(
-			String name,
-			Type service,
-			Lifestyle lifestyle, 
-			ILogger logger, 
-			IConfiguration configuration, 
-			IContext context, 
-			IDependencyModel[] dependencies, 
-			IConstructionModel constructionModel)
-		{
-			AssertUtil.ArgumentNotNull( name, "name" );
-			AssertUtil.ArgumentNotNull( service, "service" );
-			AssertUtil.ArgumentNotNull( logger, "logger" );
-			AssertUtil.ArgumentNotNull( configuration, "configuration" );
-			AssertUtil.ArgumentNotNull( context, "context" );
-			AssertUtil.ArgumentNotNull( dependencies, "dependencies" );
-			AssertUtil.ArgumentNotNull( constructionModel, "constructionModel" );
-
-			m_name = name;
-			m_service = service;
-			m_lifestyle = lifestyle;
-			m_logger = logger;
-			m_config = configuration;
-			m_context = context;
-			m_dependencies = dependencies;
-			m_constructionModel = constructionModel;
-		}
-
-		#region IComponentModel Members
-
-		public String Name
-		{
-			get
-			{
-				return m_name;
-			}
-		}
-
-		public Type Service
-		{
-			get
-			{
-				return m_service;
-			}
-		}
-
-		public Lifestyle SupportedLifestyle
-		{
-			get
-			{
-				return m_lifestyle;
-			}
-		}
-
-		public ILogger Logger
-		{
-			get
-			{
-				return m_logger;
-			}
-			set
-			{
-				m_logger = value;
-			}
-		}
-
-		public IConfiguration Configuration
-		{
-			get
-			{
-				return m_config;
-			}
-			set
-			{
-				m_config = value;
-			}
-		}
-
-		public IContext Context
-		{
-			get
-			{
-				return m_context;
-			}
-		}
-
-		public IDependencyModel[] Dependencies
-		{
-			get
-			{
-				return m_dependencies;
-			}
-		}
-
-		public IConstructionModel ConstructionModel
-		{
-			get
-			{
-				return m_constructionModel;
-			}
-		}
-
-		#endregion
-	}
-}
+ // 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.Model.Default
+{
+	using System;
+
+	using Apache.Avalon.Framework;
+	using Apache.Avalon.Castle.MicroKernel.Model;
+
+	/// <summary>
+	/// Summary description for DefaultComponentModel.
+	/// </summary>
+	public class DefaultComponentModel : IComponentModel
+	{
+		private Type m_service;
+		private String m_name;
+		private Lifestyle m_lifestyle;
+		private Activation m_activation;
+		private ILogger m_logger;
+		private IConfiguration m_config;
+		private IContext m_context;
+		private IDependencyModel[] m_dependencies;
+		private IConstructionModel m_constructionModel;
+
+		protected DefaultComponentModel()
+		{
+			m_context = new DefaultContext();
+		}
+
+		public DefaultComponentModel(
+			ComponentData data,
+			Type service,
+			ILogger logger,
+			IConfiguration configuration,
+			IConstructionModel constructionModel) : this()
+		{
+			AssertUtil.ArgumentNotNull(data, "data");
+			AssertUtil.ArgumentNotNull(service, "service");
+			AssertUtil.ArgumentNotNull(logger, "logger");
+			AssertUtil.ArgumentNotNull(configuration, "configuration");
+			AssertUtil.ArgumentNotNull(constructionModel, "constructionModel");
+
+			m_name = data.Name;
+			m_service = service;
+			m_lifestyle = data.SupportedLifestyle;
+			m_activation = data.AvalonComponent.Activation;
+			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;
+		}
+
+		#region IComponentModel Members
+
+		public String Name
+		{
+			get { return m_name; }
+		}
+
+		public Type Service
+		{
+			get { return m_service; }
+		}
+
+		public Lifestyle SupportedLifestyle
+		{
+			get { return m_lifestyle; }
+		}
+
+		public Activation ActivationPolicy
+		{
+			get { return m_activation; }
+		}
+
+		public ILogger Logger
+		{
+			get { return m_logger; }
+			set { m_logger = value; }
+		}
+
+		public IConfiguration Configuration
+		{
+			get { return m_config; }
+			set { m_config = value; }
+		}
+
+		public IContext Context
+		{
+			get { return m_context; }
+		}
+
+		public IDependencyModel[] Dependencies
+		{
+			get { return m_dependencies; }
+		}
+
+		public IConstructionModel ConstructionModel
+		{
+			get { return m_constructionModel; }
+		}
+
+		#endregion
+	}
+}
\ No newline at end of file

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 07:56:39 2004
@@ -22,16 +22,15 @@
 
 	using Apache.Avalon.Castle.MicroKernel.Subsystems.Configuration;
 	using Apache.Avalon.Castle.MicroKernel.Subsystems.Logger;
-	using Apache.Avalon.Castle.MicroKernel.Subsystems.Context;
 
 	/// <summary>
 	/// Summary description for DefaultComponentModelBuilder.
 	/// </summary>
 	public class DefaultComponentModelBuilder : IComponentModelBuilder
 	{
-		private Kernel m_kernel;
+		private IKernel m_kernel;
 
-		public DefaultComponentModelBuilder(Kernel kernel)
+		public DefaultComponentModelBuilder( IKernel kernel )
 		{
 			m_kernel = kernel;
 		}
@@ -54,13 +53,9 @@
 				new DefaultConstructionModel( implementation, data.Constructor, data.PropertiesInfo );
 
 			ILogger logger = CreateLogger( data );
-			IContext context = CreateContext();
 			IConfiguration config = CreateConfiguration( data );
 
-			return new DefaultComponentModel( 
-				data.Name, service, data.SupportedLifestyle, 
-				logger, config, new DefaultContext(), 
-				data.DependencyModel, constructionModel );
+			return new DefaultComponentModel( data, service, logger, config, constructionModel );
 		}
 
 		#endregion
@@ -94,13 +89,6 @@
 			{
 				return new DefaultConfiguration();
 			}
-		}
-
-		protected virtual IContext CreateContext()
-		{
-			// IContext context = 
-			// 	m_kernel.ContextManager.CreateContext( data.AvalonContext, data.ContextEntries );
-			return new DefaultContext();
 		}
 
 		protected void InspectAvalonAttributes( ComponentData componentData )

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Model/IComponentModel.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Model/IComponentModel.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Model/IComponentModel.cs	Mon Aug 30 07:56:39 2004
@@ -1,68 +1,72 @@
-// 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.Model
-{
-	using System;
-
-	using Apache.Avalon.Framework;
-
-	/// <summary>
-	/// Summary description for IComponentModel.
-	/// </summary>
-	public interface IComponentModel
-	{
-		String Name
-		{
-			get;
-		}
-
-		Lifestyle SupportedLifestyle
-		{
-			get;
-		}
-
-		Type Service
-		{
-			get;
-		}
-
-		ILogger Logger
-		{
-			get;
-			set;
-		}
-
-		IConfiguration Configuration
-		{
-			get;
-			set;
-		}
-
-		IContext Context
-		{
-			get;
-		}
-
-		IDependencyModel[] Dependencies
-		{
-			get;
-		}
-
-		IConstructionModel ConstructionModel
-		{
-			get;
-		}
-	}
-}
+ // 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.Model
+{
+	using System;
+
+	using Apache.Avalon.Framework;
+
+	/// <summary>
+	/// Holds information necessary for the lifetime of the component.
+	/// </summary>
+	public interface IComponentModel
+	{
+		/// <summary>
+		/// Component name
+		/// </summary>
+		String Name { get; }
+
+		/// <summary>
+		/// Desired lifecycle
+		/// </summary>
+		Lifestyle SupportedLifestyle { get; }
+
+		/// <summary>
+		/// Desired activation policy
+		/// </summary>
+		Activation ActivationPolicy { get; }
+
+		/// <summary>
+		/// Service being exposed by the component
+		/// </summary>
+		Type Service { get; }
+
+		/// <summary>
+		/// ILogger implementation
+		/// </summary>
+		ILogger Logger { get; set; }
+
+		/// <summary>
+		/// Configuration node for the component
+		/// </summary>
+		IConfiguration Configuration { get; set; }
+
+		/// <summary>
+		/// Context for the component
+		/// </summary>
+		IContext Context { get; }
+
+		/// <summary>
+		/// List of dependencies declared by the component
+		/// </summary>
+		IDependencyModel[] Dependencies { get; }
+
+		/// <summary>
+		/// Information to allow the correct construction 
+		/// of the component
+		/// </summary>
+		IConstructionModel ConstructionModel { get; }
+	}
+}
\ No newline at end of file

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Model/IConstructionModel.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Model/IConstructionModel.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Model/IConstructionModel.cs	Mon Aug 30 07:56:39 2004
@@ -1,40 +1,41 @@
-// 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.Model
-{
-	using System;
-	using System.Reflection;
-
-	/// <summary>
-	/// Summary description for IConstructionModel.
-	/// </summary>
-	public interface IConstructionModel
-	{
-		Type Implementation
-		{
-			get;
-		}
-
-		ConstructorInfo SelectedConstructor
-		{
-			get;
-		}
-
-		PropertyInfo[] SelectedProperties
-		{
-			get;
-		}
-	}
-}
+ // 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.Model
+{
+	using System;
+	using System.Reflection;
+
+	/// <summary>
+	/// Holds the information to allow the container to
+	/// correctly instantiate the component implementation.
+	/// </summary>
+	public interface IConstructionModel
+	{
+		/// <summary>
+		/// Implementation type
+		/// </summary>
+		Type Implementation { get; }
+
+		/// <summary>
+		/// The best constructor selected.
+		/// </summary>
+		ConstructorInfo SelectedConstructor { get; }
+
+		/// <summary>
+		/// Properties that will be used to satisfy dependencies.
+		/// </summary>
+		PropertyInfo[] SelectedProperties { get; }
+	}
+}
\ No newline at end of file

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Model/IDependencyModel.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Model/IDependencyModel.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Model/IDependencyModel.cs	Mon Aug 30 07:56:39 2004
@@ -1,39 +1,40 @@
-// 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.Model
-{
-	using System;
-
-	/// <summary>
-	/// Summary description for IDependencyModel.
-	/// </summary>
-	public interface IDependencyModel
-	{
-		Type Service
-		{
-			get;
-		}
-
-		String LookupKey
-		{
-			get;
-		}
-
-		bool Optional
-		{
-			get;
-		}
-	}
-}
+ // 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.Model
+{
+	using System;
+
+	/// <summary>
+	/// Holds the dependency information as 
+	/// requested by the component.
+	/// </summary>
+	public interface IDependencyModel
+	{
+		/// <summary>
+		/// Type of the service registered as a dependency.
+		/// </summary>
+		Type Service { get; }
+
+		/// <summary>
+		/// Name that will be used to request this dependency.
+		/// </summary>
+		String LookupKey { get; }
+
+		/// <summary>
+		/// Is this dependency optional?
+		/// </summary>
+		bool Optional { get; }
+	}
+}
\ No newline at end of file

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Model/ModelBuilderException.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Model/ModelBuilderException.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Model/ModelBuilderException.cs	Mon Aug 30 07:56:39 2004
@@ -17,7 +17,8 @@
 	using System;
 
 	/// <summary>
-	/// Summary description for ModelBuilderException.
+	/// Exception throwed if the <see cref="IComponentModelBuilder"/>
+	/// fail to collect the necessary information.
 	/// </summary>
 	[Serializable]
 	public class ModelBuilderException : System.Exception

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Subsystems/AbstractSubsystem.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Subsystems/AbstractSubsystem.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Subsystems/AbstractSubsystem.cs	Mon Aug 30 07:56:39 2004
@@ -21,7 +21,7 @@
 	/// </summary>
 	public abstract class AbstractSubsystem : IKernelSubsystem
 	{
-		private Kernel m_kernel;
+		private IKernel m_kernel;
 
 		public AbstractSubsystem()
 		{
@@ -29,7 +29,7 @@
 
 		#region IKernelSubsystem Members
 
-		public void Init(Kernel kernel)
+		public void Init( IKernel kernel )
 		{
 			AssertUtil.ArgumentNotNull( kernel, "kernel" );
 
@@ -38,7 +38,7 @@
 
 		#endregion
 
-		protected virtual Kernel Kernel
+		protected virtual IKernel Kernel
 		{
 			get
 			{

Modified: avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Subsystems/Events/Default/EventManager.cs
==============================================================================
--- avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Subsystems/Events/Default/EventManager.cs	(original)
+++ avalon/trunk/central/laboratory/avalon-net/Castle/MicroKernel/Subsystems/Events/Default/EventManager.cs	Mon Aug 30 07:56:39 2004
@@ -95,7 +95,6 @@
 		public void OnComponentDestroyed( EventManagerData data )
 		{
 			RaiseEvent( ComponentDestroyedEvent, data );
-
 		}
 
 		#endregion

---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@avalon.apache.org
For additional commands, e-mail: cvs-help@avalon.apache.org