Esempio n. 1
0
 private async Task ProcessEvent(string eventName, string message)
 {
     if (_subManager.HasSubscriptionForEvent(eventName))
     {
         using (var scope = _autofac.BeginLifetimeScope(AUTOFAC_SCOPE_NAME))
         {
             var subscriptions = _subManager.GetSubscriptionsForEvent(eventName);
             foreach (var subscription in subscriptions)
             {
                 if (subscription.IsDynamic)
                 {
                     var     handler   = scope.ResolveOptional(subscription.HandlerType) as IDynamicEventHandler;
                     dynamic eventData = JObject.Parse(message);
                     await handler.Handle(eventData);
                 }
                 else
                 {
                     var eventType        = _subManager.GetEventType(eventName);
                     var integrationEvent = JsonConvert.DeserializeObject(message, eventType);
                     var handler          = scope.ResolveOptional(subscription.HandlerType);
                     var concreteHandler  = typeof(IEventHandler <>).MakeGenericType(eventType);
                     await(Task) concreteHandler.GetMethod("Handle").Invoke(handler, new object[] { integrationEvent });
                 }
             }
         }
     }
     throw new NotImplementedException();
 }