protected override void When(DomainEvent domainEvent) { Boolean handled = false; IInternalEventHandler entityToApply = Leases; switch (domainEvent) { case DHCPv6ScopePropertiesUpdatedEvent e: Properties = e.Properties; break; case DHCPv6ScopeAddressPropertiesUpdatedEvent e: AddressRelatedProperties = e.AddressProperties; SetSuspendedState(true, false); break; case DHCPv6ScopeDescriptionUpdatedEvent e: Description = new ScopeDescription(e.Description); break; case DHCPv6ScopeNameUpdatedEvent e: Name = new ScopeName(e.Name); break; default: break; } if (handled == false) { ApplyToEnity(entityToApply, domainEvent); } }
protected void ApplyToEnity(IInternalEventHandler entity, DomainEvent domainEvent, Boolean onlyIfNotAlreadyHandeld = true) { if (entity == null || domainEvent == null) { return; } if (domainEvent.IsHandled() == false || onlyIfNotAlreadyHandeld == false) { entity.Handle(domainEvent); } }
protected override Action GenerateUnsubscriptionAction(IInternalEventHandler handler) { return delegate { lock (_sync) { IList<IInternalEventHandler> handlers; if (HandlersDictionary.TryGetValue(handler.EventType, out handlers)) { var newHandlers = new List<IInternalEventHandler>(handlers); if (newHandlers.Remove(handler)) { HandlersDictionary[handler.EventType] = newHandlers; } } } }; }
public override Action Subscribe(IInternalEventHandler handler) { lock (_sync) { IList<IInternalEventHandler> handlers; if (!HandlersDictionary.TryGetValue(handler.EventType, out handlers)) { var newHandlersDictionary = new Dictionary<Type, IList<IInternalEventHandler>>(HandlersDictionary) {{handler.EventType, new List<IInternalEventHandler> {handler}}}; HandlersDictionary = newHandlersDictionary; } else { var newHandlers = new List<IInternalEventHandler>(handlers) {handler}; HandlersDictionary[handler.EventType] = newHandlers; } } return GenerateUnsubscriptionAction(handler); }
protected void ApplyToEntity(IInternalEventHandler entity, object @event) => entity?.Handle(@event);
protected void ApplyToEntity(IInternalEventHandler <EventArgs> entity, object args) => entity?.HandleEvent(this, args);
protected void ApplyToEntity(IInternalEventHandler entity, DomainEvent domainEvent) => entity?.Handle(domainEvent);