private void AddConstraints(IDictionary <object, object> properties, IList <SelectorModel> selectors) { if (properties.TryGetValue(typeof(IWebHookEventMetadata), out var eventMetadata)) { AddConstraint(_eventMapperConstraint, selectors); } if (properties.TryGetValue(typeof(IWebHookEventSelectorMetadata), out var eventSourceMetadata)) { var eventName = ((IWebHookEventSelectorMetadata)eventSourceMetadata).EventName; if (eventName != null) { // IWebHookEventMetadata is mandatory when performing action selection using event names. Debug.Assert(eventMetadata != null); properties.TryGetValue(typeof(IWebHookPingRequestMetadata), out var pingMetadata); // Use eventMetadata to choose constraint type because IWebHookPingRequestMetadata is optional. IActionConstraintMetadata constraint; if (eventMetadata is IWebHookEventMetadata) { constraint = new WebHookSingleEventNamesConstraint( eventName, ((IWebHookPingRequestMetadata)pingMetadata)?.PingEventName); } else { constraint = new WebHookMultipleEventNamesConstraint( eventName, (IReadOnlyList <IWebHookPingRequestMetadata>)pingMetadata); } AddConstraint(constraint, selectors); } } }
private void AddConstraints(IDictionary <object, object> properties, IList <SelectorModel> selectors) { if (properties.TryGetValue(typeof(IWebHookEventMetadata), out var eventMetadata)) { AddConstraint(_eventMapperConstraint, selectors); } if (properties.TryGetValue(typeof(IWebHookEventSelectorMetadata), out var eventSourceMetadata)) { var eventName = ((IWebHookEventSelectorMetadata)eventSourceMetadata).EventName; if (eventName != null) { IActionConstraintMetadata constraint; if (eventMetadata == null) { constraint = new WebHookSingleEventNamesConstraint(eventName, pingEventName: null); } else if (eventMetadata is IWebHookEventMetadata singleEventMetadata) { constraint = new WebHookSingleEventNamesConstraint( eventName, singleEventMetadata.PingEventName); } else { constraint = new WebHookMultipleEventNamesConstraint( eventName, (IEnumerable <IWebHookEventMetadata>)eventMetadata); } AddConstraint(constraint, selectors); } } }