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
.Releasers
18 using System
.Collections
;
21 /// Summary description for AllComponentsReleasePolicy.
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
];
51 instance2Handler
.Remove(instance
);
53 handler
.Release(instance
);
59 #region IDisposable Members
63 foreach(DictionaryEntry entry
in instance2Handler
)
65 object instance
= entry
.Key
;
66 IHandler handler
= (IHandler
) entry
.Value
;
67 handler
.Release(instance
);
70 instance2Handler
.Clear();