Fixing an issue with output parameters that are of type IntPtr
[castle.git] / InversionOfControl / Castle.MicroKernel / Lifestyle / PoolableLifestyleManager.cs
blob46c28a06d1e3ae81ef55b019dc875dad77c4a79a
1 // Copyright 2004-2008 Castle Project - http://www.castleproject.org/
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
15 namespace Castle.MicroKernel.Lifestyle
17 using System;
18 using Castle.Core;
19 using Castle.MicroKernel.Lifestyle.Pool;
21 /// <summary>
22 /// Implements a Poolable Lifestyle Manager.
23 /// </summary>
24 [Serializable]
25 public class PoolableLifestyleManager : AbstractLifestyleManager
27 private IPool pool;
28 private int initialSize;
29 private int maxSize;
31 public PoolableLifestyleManager(int initialSize, int maxSize)
33 this.initialSize = initialSize;
34 this.maxSize = maxSize;
37 public override void Init(IComponentActivator componentActivator, IKernel kernel, ComponentModel model)
39 base.Init(componentActivator, kernel, model);
41 pool = CreatePool(initialSize, maxSize);
44 public override object Resolve(CreationContext context)
46 return pool.Request(context);
49 public override void Release(object instance)
51 pool.Release(instance);
54 public override void Dispose()
56 pool.Dispose();
59 protected IPool CreatePool(int initialSize, int maxSize)
61 if (!Kernel.HasComponent(typeof(IPoolFactory)))
63 Kernel.AddComponent("castle.internal.poolfactory",
64 typeof(IPoolFactory), typeof(DefaultPoolFactory));
67 IPoolFactory factory = Kernel[typeof(IPoolFactory)] as IPoolFactory;
69 return factory.Create(initialSize, maxSize, ComponentActivator);