public static IEventFlowOptions AddEventUpgraders(
     this IEventFlowOptions eventFlowOptions,
     params Type[] eventUpgraderTypes)
 {
     return(eventFlowOptions
            .AddEventUpgraders((IEnumerable <Type>)eventUpgraderTypes));
 }
        public static IEventFlowOptions AddEventUpgraders(
            this IEventFlowOptions eventFlowOptions,
            Assembly fromAssembly,
            Predicate <Type> predicate = null)
        {
            predicate = predicate ?? (t => true);
            var eventUpgraderTypes = fromAssembly
                                     .GetTypes()
                                     .Where(t => t.GetInterfaces().Any(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IEventUpgrader <,>)))
                                     .Where(t => predicate(t));

            return(eventFlowOptions
                   .AddEventUpgraders(eventUpgraderTypes));
        }
        public static IEventFlowOptions AddEventUpgraders(
            this IEventFlowOptions eventFlowOptions,
            Assembly fromAssembly,
            Predicate <Type> predicate = null)
        {
            predicate = predicate ?? (t => true);
            var eventUpgraderTypes = fromAssembly
                                     .GetTypes()
                                     .Where(t => t.GetTypeInfo().GetInterfaces().Any(IsEventUpgraderInterface))
                                     .Where(t => !t.HasConstructorParameterOfType(IsEventUpgraderInterface))
                                     .Where(t => predicate(t));

            return(eventFlowOptions
                   .AddEventUpgraders(eventUpgraderTypes));
        }