User: xtoff
Date: 2009/12/18 04:32 PM

Modified:
 /InversionOfControl/trunk/src/Castle.MicroKernel/
  DefaultKernel.cs, DefaultKernel_Events.cs

Log:
 removed calls to EventHandlerList which is not available in Silverlight

File Changes:

Directory: /InversionOfControl/trunk/src/Castle.MicroKernel/
============================================================

File [modified]: DefaultKernel.cs
Delta lines: +66 -34
===================================================================

--- InversionOfControl/trunk/src/Castle.MicroKernel/DefaultKernel_Events.cs     
2009-12-18 22:42:45 UTC (rev 6463)
+++ InversionOfControl/trunk/src/Castle.MicroKernel/DefaultKernel_Events.cs     
2009-12-18 23:32:02 UTC (rev 6464)
@@ -12,12 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-using System.Threading;
-
 namespace Castle.MicroKernel
 {
        using System;
+       using System.Collections.Generic;
        using System.ComponentModel;
+       using System.Runtime.CompilerServices;
        using System.Runtime.Serialization;
        using Core;
 
@@ -50,7 +50,7 @@
 #if (!SILVERLIGHT)
                [NonSerialized]
 #endif
-               private readonly EventHandlerList events = new 
EventHandlerList();
+               private readonly IDictionary<object,Delegate> events = new 
Dictionary<object,Delegate>();
 
 #if !SILVERLIGHT
                public override object InitializeLifetimeService()
@@ -64,14 +64,14 @@
                /// </summary>
                public event HandlerDelegate HandlerRegistered
                {
-                       add { events.AddHandler(HandlerRegisteredEvent, value); 
}
-                       remove { events.RemoveHandler(HandlerRegisteredEvent, 
value); }
+                       add { AddHandler(HandlerRegisteredEvent, value); }
+                       remove { RemoveHandler(HandlerRegisteredEvent, value); }
                }
 
                public event HandlersChangedDelegate HandlersChanged
                {
-                       add { events.AddHandler(HandlersChangedEvent, value); }
-                       remove { events.RemoveHandler(HandlersChangedEvent, 
value); }
+                       add { AddHandler(HandlersChangedEvent, value); }
+                       remove { RemoveHandler(HandlersChangedEvent, value); }
                }
 
                /// <summary>
@@ -80,8 +80,8 @@
                /// <value></value>
                public event ComponentDataDelegate ComponentRegistered
                {
-                       add { events.AddHandler(ComponentRegisteredEvent, 
value); }
-                       remove { events.RemoveHandler(ComponentRegisteredEvent, 
value); }
+                       add { AddHandler(ComponentRegisteredEvent, value); }
+                       remove { RemoveHandler(ComponentRegisteredEvent, 
value); }
                }
 
                /// <summary>
@@ -90,8 +90,8 @@
                /// <value></value>
                public event ComponentDataDelegate ComponentUnregistered
                {
-                       add { events.AddHandler(ComponentUnregisteredEvent, 
value); }
-                       remove { 
events.RemoveHandler(ComponentUnregisteredEvent, value); }
+                       add { AddHandler(ComponentUnregisteredEvent, value); }
+                       remove { RemoveHandler(ComponentUnregisteredEvent, 
value); }
                }
 
                /// <summary>
@@ -100,8 +100,8 @@
                /// <value></value>
                public event ComponentInstanceDelegate ComponentCreated
                {
-                       add { events.AddHandler(ComponentCreatedEvent, value); }
-                       remove { events.RemoveHandler(ComponentCreatedEvent, 
value); }
+                       add { AddHandler(ComponentCreatedEvent, value); }
+                       remove { RemoveHandler(ComponentCreatedEvent, value); }
                }
 
                /// <summary>
@@ -110,8 +110,8 @@
                /// <value></value>
                public event ComponentInstanceDelegate ComponentDestroyed
                {
-                       add { events.AddHandler(ComponentDestroyedEvent, 
value); }
-                       remove { events.RemoveHandler(ComponentDestroyedEvent, 
value); }
+                       add { AddHandler(ComponentDestroyedEvent, value); }
+                       remove { RemoveHandler(ComponentDestroyedEvent, value); 
}
                }
 
                /// <summary>
@@ -120,8 +120,8 @@
                /// <value></value>
                public event EventHandler AddedAsChildKernel
                {
-                       add { events.AddHandler(AddedAsChildKernelEvent, 
value); }
-                       remove { events.RemoveHandler(AddedAsChildKernelEvent, 
value); }
+                       add { AddHandler(AddedAsChildKernelEvent, value); }
+                       remove { RemoveHandler(AddedAsChildKernelEvent, value); 
}
                }
 
                /// <summary>
@@ -129,8 +129,8 @@
                /// </summary>
                public event EventHandler RemovedAsChildKernel
                {
-                       add { events.AddHandler(RemovedAsChildKernelEvent, 
value); }
-                       remove { 
events.RemoveHandler(RemovedAsChildKernelEvent, value); }
+                       add { AddHandler(RemovedAsChildKernelEvent, value); }
+                       remove { RemoveHandler(RemovedAsChildKernelEvent, 
value); }
                }
 
                /// <summary>
@@ -139,56 +139,56 @@
                /// <value></value>
                public event ComponentModelDelegate ComponentModelCreated
                {
-                       add { events.AddHandler(ComponentModelCreatedEvent, 
value); }
-                       remove { 
events.RemoveHandler(ComponentModelCreatedEvent, value); }
+                       add { AddHandler(ComponentModelCreatedEvent, value); }
+                       remove { RemoveHandler(ComponentModelCreatedEvent, 
value); }
                }
 
                public event DependencyDelegate DependencyResolving
                {
-                       add { events.AddHandler(DependencyResolvingEvent, 
value); }
-                       remove { events.RemoveHandler(DependencyResolvingEvent, 
value); }
+                       add { AddHandler(DependencyResolvingEvent, value); }
+                       remove { RemoveHandler(DependencyResolvingEvent, 
value); }
                }
 
                protected virtual void RaiseComponentRegistered(String key, 
IHandler handler)
                {
-                       ComponentDataDelegate eventDelegate = 
(ComponentDataDelegate)events[ComponentRegisteredEvent];
+                       ComponentDataDelegate eventDelegate = 
GetEventHandlers<ComponentDataDelegate>(ComponentRegisteredEvent);
                        if (eventDelegate != null) eventDelegate(key, handler);
                }
 
 
                protected virtual void RaiseComponentUnregistered(String key, 
IHandler handler)
                {
-                       ComponentDataDelegate eventDelegate = 
(ComponentDataDelegate)events[ComponentUnregisteredEvent];
+                       ComponentDataDelegate eventDelegate = 
GetEventHandlers<ComponentDataDelegate>(ComponentUnregisteredEvent);
                        if (eventDelegate != null) eventDelegate(key, handler);
                }
 
                public virtual void RaiseComponentCreated(ComponentModel model, 
object instance)
                {
-                       ComponentInstanceDelegate eventDelegate = 
(ComponentInstanceDelegate)events[ComponentCreatedEvent];
+                       var eventDelegate = 
GetEventHandlers<ComponentInstanceDelegate>(ComponentCreatedEvent);
                        if (eventDelegate != null) eventDelegate(model, 
instance);
                }
 
                public virtual void RaiseComponentDestroyed(ComponentModel 
model, object instance)
                {
-                       ComponentInstanceDelegate eventDelegate = 
(ComponentInstanceDelegate)events[ComponentDestroyedEvent];
+                       var eventDelegate = 
GetEventHandlers<ComponentInstanceDelegate>(ComponentDestroyedEvent);
                        if (eventDelegate != null) eventDelegate(model, 
instance);
                }
 
                protected virtual void RaiseAddedAsChildKernel()
                {
-                       EventHandler eventDelegate = 
(EventHandler)events[AddedAsChildKernelEvent];
+                       var eventDelegate = 
GetEventHandlers<EventHandler>(AddedAsChildKernelEvent);
                        if (eventDelegate != null) eventDelegate(this, 
EventArgs.Empty);
                }
 
                protected virtual void RaiseRemovedAsChildKernel()
                {
-                       EventHandler eventDelegate = 
(EventHandler)events[RemovedAsChildKernelEvent];
+                       var eventDelegate = 
GetEventHandlers<EventHandler>(RemovedAsChildKernelEvent);
                        if (eventDelegate != null) eventDelegate(this, 
EventArgs.Empty);
                }
 
                protected virtual void 
RaiseComponentModelCreated(ComponentModel model)
                {
-                       ComponentModelDelegate eventDelegate = 
(ComponentModelDelegate)events[ComponentModelCreatedEvent];
+                       var eventDelegate = 
GetEventHandlers<ComponentModelDelegate>(ComponentModelCreatedEvent);
                        if (eventDelegate != null) eventDelegate(model);
                }
 
@@ -201,7 +201,7 @@
                                        handlersChanged = true;
                                }
                                
-                               return;         
+                               return;
                        }
 
                        DoActualRaisingOfHandlersChanged();
@@ -214,7 +214,7 @@
                        while (stateChanged)
                        {
                                stateChanged = false;
-                               HandlersChangedDelegate eventDelegate = 
(HandlersChangedDelegate)events[HandlersChangedEvent];
+                               var eventDelegate = 
GetEventHandlers<HandlersChangedDelegate>(HandlersChangedEvent);
                                if (eventDelegate != null) eventDelegate(ref 
stateChanged);
                        }
                }
@@ -226,13 +226,13 @@
                        while (stateChanged)
                        {
                                stateChanged = false;
-                               HandlerDelegate eventDelegate = 
(HandlerDelegate)events[HandlerRegisteredEvent];
+                               var eventDelegate = 
GetEventHandlers<HandlerDelegate>(HandlerRegisteredEvent);
                                if (eventDelegate != null) 
eventDelegate(handler, ref stateChanged);
                        }
                }
                protected virtual void RaiseDependencyResolving(ComponentModel 
client, DependencyModel model, Object dependency)
                {
-                       DependencyDelegate eventDelegate = 
(DependencyDelegate)events[DependencyResolvingEvent];
+                       var eventDelegate = 
GetEventHandlers<DependencyDelegate>(DependencyResolvingEvent);
                        if (eventDelegate != null) eventDelegate(client, model, 
dependency);
                }
 
@@ -277,5 +277,37 @@
                                }
                        }
                }
+
+               [MethodImpl(MethodImplOptions.Synchronized)]
+               protected void AddHandler(object key, Delegate value)
+               {
+                       Delegate @event;
+                       if (events.TryGetValue(key, out @event))
+                       {
+                               events[key] = Delegate.Combine(@event, value);
+                               return;
+                       }
+
+                       events.Add(key, Delegate.Combine(value));
+               }
+
+               [MethodImpl(MethodImplOptions.Synchronized)]
+               protected void RemoveHandler(object key, Delegate value)
+               {
+                       Delegate @event;
+                       if (events.TryGetValue(key, out @event))
+                       {
+                               events[key] = Delegate.Remove(@event, value);
+                       }
+               }
+
+               [MethodImpl(MethodImplOptions.Synchronized)]
+               protected TEventHandler GetEventHandlers<TEventHandler>(object 
key) where TEventHandler : class // where TEventHandler : Delegate <-- this is 
illegal :/
+               {
+                       Delegate handlers;
+                       events.TryGetValue(key, out handlers);
+                       return handlers as TEventHandler;
+
+               }
        }

File [modified]: DefaultKernel_Events.cs
Delta lines: +0 -0
===================================================================

--

You received this message because you are subscribed to the Google Groups 
"Castle Project Commits" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/castle-project-commits?hl=en.


Reply via email to