1 // Copyright 2004-2008 Castle Project - http://www.castleproject.org/
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
7 // http://www.apache.org/licenses/LICENSE-2.0
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
19 using Castle
.MicroKernel
.Lifestyle
.Pool
;
22 /// Implements a Poolable Lifestyle Manager.
25 public class PoolableLifestyleManager
: AbstractLifestyleManager
28 private int initialSize
;
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()
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
);