Fixing an issue with output parameters that are of type IntPtr
[castle.git] / InversionOfControl / Castle.MicroKernel / Releasers / AllComponentsReleasePolicy.cs
blobcaefa64bd5b7cfed60b30bd6680a29f85dc31ee1
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.Releasers
17 using System;
18 using System.Collections;
20 /// <summary>
21 /// Summary description for AllComponentsReleasePolicy.
22 /// </summary>
23 [Serializable]
24 public class AllComponentsReleasePolicy : IReleasePolicy
26 private IDictionary instance2Handler = Hashtable.Synchronized(
27 new Hashtable(new Util.ReferenceEqualityComparer()));
29 public AllComponentsReleasePolicy()
33 #region IReleasePolicy Members
35 public virtual void Track(object instance, IHandler handler)
37 instance2Handler[instance] = handler;
40 public bool HasTrack(object instance)
42 return instance2Handler.Contains(instance);
45 public void Release(object instance)
47 IHandler handler = (IHandler) instance2Handler[instance];
49 if (handler != null)
51 instance2Handler.Remove(instance);
53 handler.Release(instance);
57 #endregion
59 #region IDisposable Members
61 public void Dispose()
63 foreach(DictionaryEntry entry in instance2Handler)
65 object instance = entry.Key;
66 IHandler handler = (IHandler) entry.Value;
67 handler.Release(instance);
70 instance2Handler.Clear();
73 #endregion