/// <summary> /// If event's is from assemblies not listed here, it means that it comes from server. /// </summary> /// <param name="assembly"></param> public void Discover(IEnumerable <Type> types) { var appTypes = types .Where(x => typeof(IAppProcess).IsAssignableFrom(x) && !x.IsAbstract) .ToArray(); foreach (var appType in appTypes) { AppProcessSchema item = Discover(appType, types.Select(x => x.Assembly).Distinct().ToArray()); _items.Add(item); } }
private AppProcessSchema Discover(Type appType, Assembly[] assemblies) { AppProcessSchema schema = new AppProcessSchema(appType, ServiceConventions.GetCategoryFromNamespace(appType.Namespace)); var methods = appType.GetMethods(DEFAULT_FLAGS) .Where(x => x.Name == "When") .ToArray(); foreach (var m in methods) { var args = m.GetParameters(); if (args.Length == 1) { ReactionSource source; ReactionReason reason; var pType = args[0].ParameterType; if (typeof(ICommand).IsAssignableFrom(pType)) { reason = ReactionReason.Command; } else if (typeof(IEvent).IsAssignableFrom(pType)) { reason = ReactionReason.Event; } else { reason = ReactionReason.Custom; }; //if (assemblies.Any(x => x == pType.Assembly)) if (appType.Assembly == pType.Assembly) { source = ReactionSource.UiOnly; } else { source = ReactionSource.Server; } schema.AddReaction(reason, source, pType); } else if (args.Length == 2) { ReactionSource source; ReactionReason reason; var pType = args[1].ParameterType; if (typeof(ICommand).IsAssignableFrom(pType)) { reason = ReactionReason.Command; } else if (typeof(IEvent).IsAssignableFrom(pType)) { reason = ReactionReason.Event; } else { reason = ReactionReason.Custom; } //if (assemblies.Any(x => x == pType.Assembly)) if (appType.Assembly == pType.Assembly) { source = ReactionSource.UiOnly; } else { source = ReactionSource.Server; } schema.AddReaction(reason, source, pType); } } return(schema); }